![]() |
EXE-/Modulname aus Fensterhandle ermitteln
Hallo zusammen,
meine Frage (diesmal ganz kurz :wink:): Wie kann ich aus einem beliebigen, existierenden Fensterhandle [ IsWindow(MyHandle) = True ] dessen vollständigen EXE-/Modul-Dateinamen ermitteln? Dass dies mit GetModuleFileName zu lösen ist, ist mit klar. Ich weiß nur nicht, wie man aus der hWnd das Instanzen-/Modul-Handle hInstance (bzw. hModule, ist das gleiche?) ermitteln kann. Ich hoffe, ihr könnt mir da (mal wieder :mrgreen:) helfen... Gruß, Marco |
Re: EXE-/Modulname aus Fensterhandle ermitteln
Warum nimmst du nicht einfach GetWindowModuleFileName?
ciao, Philipp |
Re: EXE-/Modulname aus Fensterhandle ermitteln
weil er gerade gesagt hat, dass er nicht versteht, wie er es nutzen soll?
|
Re: EXE-/Modulname aus Fensterhandle ermitteln
Zitat:
Will sagen: Die Aussage von c113plpbr ist vollkommen zutreffend. |
Re: EXE-/Modulname aus Fensterhandle ermitteln
Zitat:
[edit2]so, jetzt aber[/edit2] ciao, Philipp |
Re: EXE-/Modulname aus Fensterhandle ermitteln
Habe ich auch schon versucht, funktioniert aber irgendwie nicht (SetForeground mit der selben hWnd aber schon, außerdem erst ab NT SP3)... :?
Gruß, Marco |
Re: EXE-/Modulname aus Fensterhandle ermitteln
oha, ja, sorry. da hab ich mich verlesen...
|
Re: EXE-/Modulname aus Fensterhandle ermitteln
Zitat:
|
Re: EXE-/Modulname aus Fensterhandle ermitteln
Zitat:
Zitat:
Delphi-Quellcode:
Is natürlich auch wieder NT-only ... aber wenn das auch ned funktioniert, dann schau mal, ob es nicht von irgendwas geblockt wird ... z.B. ZoneAlarm tut das manchmal ganz gern ... ^^
uses PsApi;
(*...*) var hwnd_ : HWND; PID : Cardinal; hProc : Cardinal; Buffer : array[0..MAX_PATH - 1] of Char; modules : array of HModule; modulecount : cardinal; begin hwnd_ := FindWindow('Notepad', nil); GetWindowThreadProcessId(hwnd_, PID); hProc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID); EnumProcessModules(hProc, nil, 0, modulecount); SetLength(modules, modulecount div SizeOf(HModule)); EnumProcessModules(hProc, PDWord(@modules[0]), modulecount, modulecount); GetModuleFilenameEx(hProc, modules[0], @Buffer[0], MAX_PATH); ShowMessage(string(Buffer)); CloseHandle(hProc); end; Und unter 9x-Systemen solltest du über GetWindowThreadProcessId die PID rausfinden können, und über CreateToolhelp32Snapshot, Process32First & Process32Next sämtliche Prozesse auflisten können. Du müsstest dann nurnoch die PID's vergleichen, und wenn du dann die richtige gefunden hast, einfach in szExeFile den Namen nachschauen ... ciao, Philipp |
Re: EXE-/Modulname aus Fensterhandle ermitteln
Hallo zusammen,
danke für eure Bemühungen! Mit GetModuleFileName() funktioniert es nach wie vor nicht, sehr wohl aber mit GetModuleFileNameEx und einem vorgeschobenen OpenProcess. :dancer: OpenProcess muss mit Zugriff PROCESS_QUERY_INFORMATION or PROCESS_VM_READ aufgerufen werden - hatte Letzteren bisher weggelassen, aber ohne ihn hat dat Janze dann eben nich funktioniert :x) :wink: Gruß, Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz