programmname mittels handle bekommen
-
hola leute
wie kann ich mittels eines handles den namen des programs rausbekommen ?
den handle hole ich mir mit GetForegroundWindow.Meep Meep
-
- GetWindowThreadProcessId
- OpenProcess
- GetModuleFileNameEx
-
DWORD pid; GetWindowThreadProcessId(hwnd, &pid); HANDLE hProcess = (HANDLE)OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid); HMODULE hModule; EnumProcessModules(hProcess,&hModule,sizeof(HMODULE),NULL); TCHAR szName[MAX_PATH]; GetModuleFileNameEx(hProcess,hModule,szName,sizeof(szName)/sizeof(szName[0]));habe ich oft im Forum gesehen. Funktioniert hier bei mir jedoch grad nicht. Handle war sicher gültig, überprüft mit WinSpy++.
GetLastError sagt nach GetWindowThreadProcessId Error Code 2: ERROR_FILE_NOT_FOUND "The system cannot find the file specified"Wo ist da der Wurm drin???
Auch der Debugger sagt mein hwnd stimmt mit dem von WinSpy++ überein.
-
Bei OpenProcess reicht eigentlich "PROCESS_QUERY_INFORMATION | PROCESS_VM_READ" vollkommen aus...
Und wo bekommst Du einen Fehler? Du prüfst ja hier niergens einen Rückgabewert...
-
Nach GetWindowThreadProcessId liefert GetLastError 2.
Wo zur Hölle soll denn da was schief gegegangen sein? Wie gesagt, hwnd is ok.
Ich trau GetLastError nich. Nach EnumProcessModules haben sowohl hProcess hModule keine Fehlerwerte.Ne, die Rechte habe ich bei mir auch nicht so hoch. Findet man nur wie gesagt genau so mehrmals im Forum.
-
Ist denn der Rückgabewert von GetWindowThreadProcessId 0?
In der DOcu steht nix, dass hier irgendwo ein Fehlercode mittels GetLastError erfragt werden könnte; somit verstehe ich eh nicht ganz warum Du das machst...
Was liefert denn OpenProcess zurück? Wenn hier NULL zurückkommt, dann kannst Du GetLastError aufrufen...
-
Ich hab eben versucht das zu editieren, aber das forum wollte nich mehr.
Bis einschließlich EnumProcessModules haben hProcess und hModule sinnvolle Werte!
-
Kannst Du mal bitte genau sagen welche Funktion was zurückliefert und was dann ein mögliches gle sagt (bisher sind es schon ztwei Versionen).
-
nix zwei versionen.
GetWindowThreadProcessId = 0 => ok!
OpenProcess != NULL => ok!
EnumProcessModules = 0 => nich ok!GetlastError nach EnumProcessModules: ERROR_NOACCESS 998 Invalid access to memory location
-
Warum setzt Du denn den letzten Parameter von "EnumProcessModules" auf NULL? Dat ist aber nich so in der Doku vorgesehen...
-
Stimmt - eigentlich war. So funktioniert es. Wie gesagt, geistert hier realtiv oft falsch rum. Sollte vielleicht mal zu den FAQs. Meep Meep wird jetzt jedenfalls sicher geholfen sein
