Seite 1 von 2

Pfade der gestarteten Programme

Verfasst: 15.08.2007 16:17
von a14xerus
Hi Leute, wie komme ich an die Datei Pfade der Programme, die im Moment laufen?
Die einzige Funktion die ich gefunden habe ist GetModuleFileName_(), aber wie komm ich an das Modulhandle ( GetModuleHandle_() ...) eines Fensters (die HWND des Fensters hol ich mir mit EnumWIndows_() )?

Verfasst: 15.08.2007 16:43
von Fluid Byte
ProgramFilename() ? :?

Verfasst: 15.08.2007 16:47
von a14xerus
ich denke das aus meinem post wenigstens herausgehen sollte, das ich externe programe meine

Verfasst: 15.08.2007 16:52
von bobobo
siehe in den sourcen zur der processgeschichte aus PBOSL getprocessfilename()

Verfasst: 15.08.2007 17:34
von a14xerus
danke
habe diesen Code hier geschrieben, hängt sich aber mit nem IMA beim getprocessfilename() auf

Code: Alles auswählen

Procedure Processes()
  Protected pid.l, name$, pfad$
  ExamineProcesses()
  While NextProcess()
    pid = GetProcessPID()
    If pid
      name$ = GetProcessName(pid)
      If name$
        pfad$ = GetProcessFileName(pid)
        Debug "#####"
        Debug pid
        Debug name$
        Debug pfad$
      EndIf
    EndIf
  Wend
EndProcedure

Verfasst: 15.08.2007 19:16
von a14xerus
//edit: da is irgendein post weg...
also: getestet mit @pid

jetzt kommt zwar kein IMA mehr, aber "pfad$" ist immer leer

Verfasst: 15.08.2007 19:28
von bobobo
unter 3.94 geht das alles noch .. hab keine ahnung .. dafür feierabend

Verfasst: 15.08.2007 20:50
von Kiffi
in der PBOSL_Process.pb steckt ein kleiner Fehler, der den IMA auslöst.

hier erst mal der Fix:

Suchen nach:

Code: Alles auswählen

Prototype.l GetModuleFileName(a,b.p-ascii,c)
Ersetzen durch:

Code: Alles auswählen

Prototype.l GetModuleFileName(a,b,c.p-ascii,d)
Suchen nach:

Code: Alles auswählen

Result=GetModuleFileName(hProcess, Name.s, Len(Name.s))
Ersetzen durch:

Code: Alles auswählen

Result=GetModuleFileName(hProcess, DLLMemModule, Name.s, Len(Name.s))
Suchen nach:

Code: Alles auswählen

Result=GetModuleFileName(hProcess, Name$, Len(Name$))
Ersetzen durch:

Code: Alles auswählen

Result=GetModuleFileName(hProcess, BaseModule, name$, Len(name$))
Suchen nach:

Code: Alles auswählen

Result=GetModuleFileName(hProcess, Name$, Len(Name$))
Ersetzen durch:

Code: Alles auswählen

Result=GetModuleFileName(hProcess, BaseModule, name$, Len(name$))
that's it. Den gefixten Source kannst Du dann direkt in Deinen Code includen.

Code: Alles auswählen

XIncludeFile "C:\Programme\PureBasic\sources\PBOSL4\LIBS4\PB\PBOSL_Process\Source\PBOSL_Process.pb"

Procedure Processes()
  Protected pid.l, name$, pfad$
  PBOSL_Process_Init()
  ExamineProcesses()
  While NextProcess()
    pid = GetProcessPID()
    If pid
      name$ = GetProcessName2(pid)
      If name$
        pfad$ = GetProcessFileName2(pid)
        Debug "#####"
        Debug pid
        Debug name$
        Debug pfad$
      EndIf
    EndIf
  Wend
  PBOSL_Process_End()
EndProcedure

Processes()
Grüße ... Kiffi

Verfasst: 15.08.2007 21:28
von a14xerus
danke für den tipp....
Aber ich hab die PBOSL nur in Lib-version, von hier geladen.
Wie komm ich denn an diese Version?

//edit: schon gefunden ;)

//edit: muss ich dann die libs löschen ,wenn cih die source-codes nehme???
Und ProcedureDLL in Procedure umbenennen?

Verfasst: 15.08.2007 21:50
von Kiffi
a14xerus hat geschrieben://edit: muss ich dann die libs löschen ,wenn cih die source-codes nehme???
ja
a14xerus hat geschrieben:Und ProcedureDLL in Procedure umbenennen?
nein

Grüße ... Kiffi