Pfade der gestarteten Programme

Für allgemeine Fragen zur Programmierung mit PureBasic.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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)?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

ok danke
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten