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 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 Dieser Tipp wurde bereits 14.599 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |