![]() |
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 |
Re: EXE-/Modulname aus Fensterhandle ermitteln
Zitat:
ciao, Philipp |
Re: EXE-/Modulname aus Fensterhandle ermitteln
Hi,
ja, aber das "NT-only" EnumModules kann man sich sparen... In GetModuleFileName in hModule einfach 0 übergeben. Somit ist der Code von Win95 bis hin zu WinXP kompatibel, man muss auch nicht zwischen zwei Codes (ProcessSnapshot und EnumProcesses/EnumModules) betriebssystembedingt switchen. :???: Gruß, Marco |
Re: EXE-/Modulname aus Fensterhandle ermitteln
Zitat:
ciao, Philipp |
Problem doch noch nicht ganz gelöst...
Hallo zusammen,
Zitat:
Habe im PSDK übersehen, dass GetModuleFileNameEx nur für NT-basierte Betriebssysteme verfügbar ist :x Also muss ich doch zwischen der ProcessSnapshot- (für Win9x) und der GetModuleFileNameEx-Variante betriebssystemabhängig umschalten. Das eigentliche Problem: Die PROCESSENTRY32 Struktur stellt zwar einen Member für den EXE-Dateinamen bereit, welcher aber wirklich nur den Dateinamen enthält, ich benötige aber den vollständigen Dateipfad! :cry: Wie kann ich nun den vollständigen Moduldateinamen (inkl. -pfad) auch unter Win9x ermitteln? Danke schon im Voraus für eure weitere Hilfe, Marco |
Re: Problem doch noch nicht ganz gelöst...
Zitat:
![]() MSDN: PROCESSENTRY32 szExeFile Pointer to a null-terminated string that specifies the name of the executable file for the process. Windows Me/98/95: The file name includes the path. LÖL! Hab gerade bemerkt, dass dieser letzte satz zwar in meiner (offline) MSDN steht, aber nicht in der Online-MSDN ... :gruebel: :mrgreen: Tipp: besorg dir ne offline-version ... ;) ciao, Philipp |
Re: EXE-/Modulname aus Fensterhandle ermitteln
Hallo Philipp,
bist wohl der einzige, der hier Nachmittags online ist?! :-D Zitat:
Zitat:
Zitat:
Zitat:
Grüße und Danke, Marco |
Re: EXE-/Modulname aus Fensterhandle ermitteln
Zitat:
|
Re: EXE-/Modulname aus Fensterhandle ermitteln
Hallo Herr Schneider, :mrgreen:
Zitat:
Gruß, Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 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