Rubrik: System/Windows · Prozesse/Tasks | VB-Versionen: VB.NET | 30.07.07 |
EXE-Name anhand eines Fenster-Handles ermitteln (.NET) Dieser Tipp zeigt, wie man anhand eines Fensterhandles den EXE-Namen der zugehörigen Anwendung ermitteln kann. | ||
Autor: mikeb69 | Bewertung: | Views: 14.607 |
www.powerdesktop-online.de | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wie oft kennt man das Handle eines Fenster, weiss aber nicht, zu welcher Anwendung das Fenster gehört. Mit unserem nachfolgendem Tipp stellen wir Ihnen genau für dieses Problem eine entsprechende Lösung vor.
Die Funktion GetEXEFromHWND ermittelt den Dateinamen der Anwendung eines übergebenen Fensterhandles.
Fügen Sie nachfolgenden Code in Ihr Projekt ein:
' alle benötigten API-Deklarationen Private Declare Function GetWindowThreadProcessId Lib "user32.dll" ( _ ByVal hwnd As IntPtr, _ ByRef lpdwProcessId As Integer) As Integer
''' <summary>Gibt den Namen der Exe für das Fenster, oder nothing, zurück.</summary> ''' <param name="hWnd">Fensterhandle</param> Public Function GetExeFromHWND(ByVal hWnd As IntPtr) As String Dim processID, threadID As Integer threadID = GetWindowThreadProcessId(hWnd, processID) Dim pid As Process = Process.GetProcessById(processID) Try Return pid.Modules(0).ModuleName Catch ex As Exception Return "" End Try End Function
Erstellen Sie eine Form und plazieren Sie darauf einen CommandButton. Beim Klicken wird dann der EXEName der aktuellen Anwendung ermittelt:
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click MsgBox GetExeFromHWND(Me.Handle) End Sub
Erweitertes Beispiel
Plazieren Sie auf die Form zwei Label-Controls lblHandle und lblEXEName. In einem sehr kurzen Intervall soll ständig das Handle des Fensters ermittelt werden, über das
sich die Maus gerade befindet. Und anhand des Fensterhandles wird dann der entsprechende EXE-Name der Anwendung ermittelt und angezeigt.
Fügen Sie hierzu folgenden Code in den Code-Teil der Form ein:
' zunächst die benötigten API-Deklarationen Private Declare Function WindowFromPoint Lib "user32" ( _ ByVal xPoint As Integer, _ ByVal yPoint As Integer) As IntPtr ' Timer-Objekt Dim WithEvents oTimer As Timer
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Timer initialisieren oTimer = New Timer oTimer.Interval = 10 oTimer.Enabled = True End Sub
Private Sub oTimer_Tick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles oTimer.Tick ' aktuelle Mausposition Dim pt As Point = Cursor.Position ' Handle des Fensters Dim hWnd As IntPtr = WindowFromPoint(pt.X, pt.Y) Label7.Text = hWnd.ToString Label9.Text = GetExeFromHWND(hWnd) End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, _ ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' Timer deaktivieren oTimer.Enabled = False oTimer.Dispose() End Sub