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.178 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. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |