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 :wink:

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 :wink:
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 :mrgreen:

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 :mrgreen:

Verfasst: 27.08.2007 21:53
von a14xerus
ok danke

Verfasst: 28.08.2007 16:06
von ts-soft
Hab in meinen templates :mrgreen:

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)