Entwickler-Ecke

Windows API - Wie mach ich GetWindowModuleFileName unter NT???


Stefan-M - Di 22.04.03 10:26
Titel: Wie mach ich GetWindowModuleFileName unter NT???
Hallo, ich hoffe Ihr hattet schöne Ostern.
Ich hab ein Problem und zwar will ich die exe eines Prozesses den ich mit EnumWindows ermittelt hab rausbekommen. Unter WinMe funnzt das auch wunderbar mit GetWindowModuleFileName(...) aber unter NT gibt er mir da nur Mein eigenes Programm und drei dll's aus.
Aber er zeigt alle Prozesse an. Nur eben mit den falschen FileNames.
Gibts da einen Unterschied?
Vielen Dank schon mal an den, der antwortet.

MfG
Stefan


Delete - Di 22.04.03 10:45

Wie rufst du die Funktion auf?


Stefan-M - Di 22.04.03 10:49

Na im weitesten Sinne so:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function EnumWindowsProc (Wnd:HWND;LParam:LPARAM):Bool; stdcall;
var
  PID   :longword;
  title :array [0..255] of Char;
  FName :array [0..255] of Char;

begin
  GetWindowThreadProcessID(Wnd,@PID);
  GetWindowText(wnd,title,256);
  GetWindowModuleFileName(wnd,FName,256);
end;


und die wird dann mit


Quelltext
1:
  EnumWindows(@EnumWindowsProc,1);                    


aufgerufen.


Motzi - Di 22.04.03 11:22

Stefan-M hat folgendes geschrieben:
Na im weitesten Sinne so:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function EnumWindowsProc (Wnd:HWND;LParam:LPARAM):Bool; stdcall;
var
  PID   :longword;
  title :array [0..255] of Char;
  FName :array [0..255] of Char;

begin
  GetWindowThreadProcessID(Wnd,@PID);
  GetWindowText(wnd,title,256);
  GetWindowModuleFileName(wnd,FName,256);
end;


und die wird dann mit


Quelltext
1:
  EnumWindows(@EnumWindowsProc,1);                    


aufgerufen.

Probier mal die Funktion GetModuleFileNameEx. Diese Funktion benötigt ein Process-Handle (ein Handle für ein Kernel-Objekt) du übergibst allerdings ein Window-Handle. Du musst dir per OpenProcess das Process-Handle für den jeweiligen Prozess holen (die ProcessID holst du dir eh schon mit GetWinWindowThreadProcessID) und übergibst dann dieses Handle an die API. WICHTIG: Nicht vergessen das Process-Handle mit CloseHandle wieder zu schließen!


Stefan-M - Di 22.04.03 11:34

GetModuleFileNameEx kennt er bei mir gar nicht 'undeclared identifier'.
Das Handle hab ich ja schon in der Variable wnd.


Stefan-M - Di 22.04.03 11:36

sorry, hab nochmal gelesen, also ich übergeb das falsche handle, moment, mach ich mal.... aber das ändert nichts dran, dass er getmodulefilenameex nicht kennt.
und warum geht es unter win-me?