Vor einiger Zeit haben wir Ihnen gezeigt, wie man das Fensterhandle einer gestarteten EXE-Datei ermitteln kann: Unser heutiger Tipp zeigt den umgekehrten Weg: anhand eines Fensterhandles soll der EXE-Name ermittelt werden. Wird der Fensterhandle nicht explizit angegeben, soll die Funktion den EXE-Namen (inkl. Pfadangabe) der aktiven Anwendung ermitteln. Option Explicit ' benötigte API-Deklarationen Private Declare Function GetForegroundWindow Lib "user32" () As Long Private Declare Function GetWindowThreadProcessId Lib "user32" ( _ ByVal hwnd As Long, _ lpdwProcessId As Long) As Long Private Declare Function OpenProcess Lib "kernel32" ( _ ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Private Declare Function EnumProcessModules Lib "psapi.dll" ( _ ByVal hProcess As Long, _ ByRef lphModule As Long, _ ByVal cb As Long, _ ByRef lpcbNeeded As Long) As Long Private Declare Function GetModuleFileNameEx Lib "psapi.dll" _ Alias "GetModuleFileNameExA" ( _ ByVal hProcess As Long, _ ByVal hModule As Long, _ ByVal lpFilename As String, _ ByVal nSize As Long) As Long Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long) Private Const PROCESS_QUERY_INFORMATION = 1024 Private Const PROCESS_VM_READ = 16 ' EXE-Datei anhand eines Fensterhandles ermitteln Public Function GetEXEFromHandle( _ Optional ByVal nHWnd As Long = 0) As String Dim nProcID As Long Dim nResult As Long Dim nTemp As Long Dim lModules(1 To 200) As Long Dim sFile As String Dim hProcess As Long ' Falls kein Fensterhandle angegeben, ' Handle des aktiven Fensters verwenden If nHWnd = 0 Then nHWnd = GetForegroundWindow() ' ProcessID ermitteln If GetWindowThreadProcessId(nHWnd, nProcID) <> 0 Then ' Prozess-Handle ermitteln hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or _ PROCESS_VM_READ, 0, nProcID) If hProcess <> 0 Then ' Module des Prozess enumerieren nResult = EnumProcessModules(hProcess, lModules(1), _ 200, nTemp) If nResult <> 0 Then ' Dateiname ermitteln sFile = Space$(260) nResult = GetModuleFileNameEx(hProcess, 0, _ sFile, Len(sFile)) sFile = LCase$(Left$(sFile, nResult)) GetEXEFromHandle = sFile End If ' Handle schließen CloseHandle hProcess End If End If End Function Beispiel: Option Explicit Private Sub Form_Load() ' Timer initialisieren Timer1.Interval = 250 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() ' EXE-Name der aktiven Anwendung ermitteln ' und in ListBox übertragen Static sLast As String Dim sFile As String sFile = GetEXEFromHandle() If sFile <> "" And sFile <> sLast Then sLast = sFile List1.AddItem sFile List1.ListIndex = List1.ListCount - 1 End If End Sub Dieser Tipp wurde bereits 17.206 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. |
sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) 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 Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |