hallo gemeinde,
eine - von mehreren methoden texte an ein fenster zu senden.
hier wird die zwischenablage benutzt.
gruss
mikeb69
eine - von mehreren methoden texte an ein fenster zu senden.
hier wird die zwischenablage benutzt.
VB.NET-Quellcode
- Public Class Form1
- Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Integer
- Private Declare Function GetForegroundWindow Lib "user32" () As Integer
- Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer
- Private Const WM_SETFOCUS As Int32 = &H7
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Process.Start("Notepad.exe")
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim p As Process = Process.GetProcessesByName("Notepad")(0)
- Clipboard.SetText(Me.TextBox1.Text)
- Me.Text = "in den vordergrundbringen"
- SetForegroundWindowEx(p.MainWindowHandle)
- Me.Text = "text senden"
- SendKeys.SendWait("^v")
- End Sub
- 'quelle: http://www.microsoft.com/germany/msdn/library/visualtools/vb6/FensterInDenDesktopVordergrundBringen.mspx?mfr=true
- ' Verwenden Sie die Funktion SetForegroundWindowEx statt der
- ' API Funktion SetForegroundWindow ausschließlich, wenn das
- ' betroffene Fenster tatsächlich in den Vordergrund gebracht
- ' werden muss.
- Private Function SetForegroundWindowEx(ByVal hWndWindow As Long) As Boolean
- ' Dient dem Setzen des Vordergrundfensters mit der Funktion
- ' SetForegroundWindow, die sich unter neueren Windows-Versionen
- ' anders verhält als unter Windows 95 und Windows NT 4.0.
- ' Der Rückgabewert ist True, wenn das Fenster erfolgreich in den
- ' Vordergrund gebracht werden konnte.
- Dim lThreadForeWin As Long ' Thread-ID für das aktuelle Vordergrundfenster
- Dim lThreadWindow As Long ' Thread-ID für das in hWndWindow spezifizierte
- ' Fenster, das in den Vordergrund des Desktops
- ' gebracht werden soll.
- ' Falls das Fenster dem gleichen Thread wie das aktuelle
- ' Vordergrundfenster angehört, ist kein Workaround erforderlich:
- lThreadWindow = GetWindowThreadProcessId(hWndWindow, 0)
- lThreadForeWin = GetWindowThreadProcessId(GetForegroundWindow(), 0)
- If lThreadWindow = lThreadForeWin Then
- ' Vordergrundfenster und zu aktivierendes Fenster gehören zum
- ' gleichen Thread. SteForegroundWindow allein reicht aus:
- SetForegroundWindowEx = CBool(SetForegroundWindow(hWndWindow))
- Else
- ' Das Vordergrundfenster gehört zu einem anderen Thread als das
- ' Fenster, das neues Vordergrundfenster werden soll. Mittels
- ' AttachThreadInput erhaten wir kurzzeitig Zugriff auf die
- ' Eingabeverarbeitung des Threads des Vordergrundfensters,
- ' so dass SetForegroundWindow wie erwartet arbeitet:
- SetForegroundWindowEx = CBool(SetForegroundWindow(hWndWindow))
- End If
- End Function
- End Class
gruss
mikeb69