2 Stimmen

Wie kann man herausfinden, welche Anwendung mit dem obersten Fenster verbunden ist?

Meine VB.NET-Anwendung soll überwachen, welche Anwendung gerade im obersten Fenster läuft. Ich habe den folgenden Ansatz mit einem Timer versucht:

Declare Function GetActiveWindow Lib "user32" () As System.IntPtr
Declare Function GetForegroundWindow Lib "user32" () As System.IntPtr
Public Declare Auto Function GetWindowText Lib "user32" _
(ByVal hWnd As System.IntPtr, _
ByVal lpString As System.Text.StringBuilder, _
ByVal cch As Integer) As Integer 

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
   Dim Caption As New System.Text.StringBuilder(256)
   Dim hWnd As IntPtr = GetForegroundWindow()
   GetWindowText(hWnd, Caption, Caption.Capacity)
   'Caption now holds the title of the topmost window
End Sub 

Daran kann ich erkennen, dass z. B. Outlook oder Internet Explorer das oberste Fenster ist, da der Name in der Titelleiste des Fensters steht. Wenn der Benutzer jedoch eine neue E-Mail in Outlook verfasst, lautet der Titel des Fensters "Unbenannte Nachricht" und gibt keinen Hinweis darauf, welche Anwendung im Fenster ausgeführt wird.

Wie kann ich herausfinden, welche Anwendung mit dem obersten Fenster verbunden ist?

Hilfe ist erwünscht!

2voto

Hans Passant Punkte 894572

Sie müssen GetWindowThreadProcessId() pinvoke. Damit erhalten Sie die ID des Prozesses, dem das Fenster gehört. Zurück zu verwaltetem Code, Process.GetProcessById() gibt Ihnen Details über den Prozess.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X