Seite 2 von 2
Verfasst: 27.08.2007 18:39
von a14xerus
danke an alle für die hilfe...
trotzdem brauch ich jetzt noch einmal das Problem aus dem anfangs post:
wie bekomme ich aus der Fenster-HWND den Pfad (meinetwegen über die PID oder das ModuleHandle)?
Verfasst: 27.08.2007 18:52
von Kiffi
a14xerus hat geschrieben:wie bekomme ich aus der Fenster-HWND den Pfad
verstehe ich jetzt nicht. Klappt bei Dir
der von mir gepostete Code nicht?
Oder meinst Du was anderes?
Grüße ... Kiffi
Verfasst: 27.08.2007 19:02
von a14xerus
nein wenn ich nur die HWND eines Fensters habe...
die die man bei PB durch WindowID() rauskriegen würde....
das ist doch nicht die PID, oder???, weil ein Prozess kann ja auch mehrere Fenster haben..
Also wenn ich NUR die Fenster HWND hab, wie komm ich dann an den Pfad vom Programm, zu dem das Fenster gehört
Verfasst: 27.08.2007 19:33
von mk-soft
Müsste so gehen.
Code: Alles auswählen
hWnd = FindWindow_(0, "PureBasic")
If hwnd
hInst = GetWindowLong_(hWnd, #GWL_HINSTANCE)
EndIf
file.s = Space(1000)
GetModuleFileName_(hInst, file, 1000)
Debug "Window : " + Str(hWnd)
Debug "hInstance : " + Str(hInst)
Debug "File : " + File
FF

Verfasst: 27.08.2007 20:06
von a14xerus
mk-soft hat geschrieben:Müsste so gehen.
Code: Alles auswählen
hWnd = FindWindow_(0, "PureBasic")
If hwnd
hInst = GetWindowLong_(hWnd, #GWL_HINSTANCE)
EndIf
file.s = Space(1000)
GetModuleFileName_(hInst, file, 1000)
Debug "Window : " + Str(hWnd)
Debug "hInstance : " + Str(hInst)
Debug "File : " + File
FF

Erst dachte ich so: "Cool", aber dann:.. mist

Es wird immer der Pfad des eigenen Programms geliefert.
Verfasst: 27.08.2007 20:30
von ts-soft
PSDK unter Tool Help Functions nachsehen:
CreateToolhelp32Snapshot
sich die Strukturen zu Modul32.., Thread32.. usw ansehen oder einfach im
API forum den fertigen Code finden

Verfasst: 27.08.2007 21:23
von a14xerus
Code: Alles auswählen
DWORD GetModuleFileName(
HMODULE hModule, // handle to module to find filename for
LPTSTR lpFilename, // pointer to buffer for module path
DWORD nSize // size of buffer, in characters
);
Mal sehen ob ich das noch irgendwie hin kriege, weil trotzdem immer "" oder der eigene Programmpfad ausgegeben wird
Verfasst: 27.08.2007 21:29
von ts-soft
Mit FindWindow_ kriegste den hWnd, mithilfe des hWnd die PID und
mithilfe der PID kannste Toolhelp schnappschuß und Module32First
usw., da steht der Name dann schon in der Structure.
Wenn ich mich an die damalige Frage erinnern könnte, würde ich
es ja raussuchen, nochmal machen hab ich keinen Bock

Verfasst: 27.08.2007 21:53
von a14xerus
ok danke
Verfasst: 28.08.2007 16:06
von ts-soft
Hab in meinen templates
Code: Alles auswählen
EnableExplicit
Procedure.s GetEXEFromHwnd(hWnd.l = 0)
Protected Result.s, PID.l, handle.l, err.l
Protected Entry.MODULEENTRY32
If hWnd = 0 : hWnd = GetForegroundWindow_() : EndIf
Entry\dwSize = SizeOf(MODULEENTRY32)
GetWindowThreadProcessId_(hWnd, @PID)
handle = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, PID)
If handle
err = Module32First_(handle, Entry)
If err
Result = PeekS(@Entry\szExePath)
EndIf
CloseHandle_(handle)
EndIf
ProcedureReturn Result
EndProcedure
Define.l hWnd = FindWindow_(0, "PureBasic")
Debug GetEXEFromHwnd(hWnd)