Seite 1 von 1

(WinAPI) Pfad + Name des eigenen Programmes ermitteln

Verfasst: 29.08.2004 06:18
von Danilo
Frage:
Wie bekomme ich denn den Pfad oder den Namen meines
Programmes heraus?

Antwort:
Den Pfad Deines Programmes bekommst Du mit folgender
Prozedur raus:

Code: Alles auswählen

Procedure.s ExePath() 
  ExePath$ = Space(2048) 
  GetModuleFileName_(0,@ExePath$,2048)
  ProcedureReturn GetPathPart(ExePath$) 
EndProcedure 

MessageRequester("",ExePath(),0)
Und das Gleiche für den EXE-Namen:

Code: Alles auswählen

Procedure.s ExeName()
  ExeName$ = Space(2048)
  GetModuleFileName_(0,@ExeName$,2048) 
  ProcedureReturn GetFilePart(ExeName$)
EndProcedure 

MessageRequester("",ExeName(),0)

Verfasst: 16.10.2005 18:58
von Deeem2031
Und weil ichs grad gebraucht habe, die Linux-Äquivalente:

Code: Alles auswählen

Procedure.s ExePath() 
  Protected ExePath$, len
  ExePath$ = Space(2048)
  len = readlink_("/proc/"+Str(getpid_())+"/exe",@ExePath$,2048)
  ExePath$ = Left(ExePath$,len)
  ProcedureReturn GetPathPart(ExePath$) 
EndProcedure

Procedure.s ExeName() 
  Protected ExePath$, len
  ExePath$ = Space(2048)
  len = readlink_("/proc/"+Str(getpid_())+"/exe",@ExePath$,2048)
  ExePath$ = Left(ExePath$,len)
  ProcedureReturn GetFilePart(ExePath$) 
EndProcedure

Verfasst: 16.10.2005 19:38
von MVXA
Frage am Rande:
Kann man in der Zeile

Code: Alles auswählen

len = readlink_("/proc/"+Str(getpid_())+"/exe",@ExePath$,2048)
nicht Str(getpid_()) durch "self" ersetzen? Ich dachte immer, dass der
Ordner "self" immer auf das eigene programm zeigt :oops:.

Verfasst: 16.10.2005 19:51
von Deeem2031
Jo, geht auch. Habs allerdings so gemacht weil ich es auch mit getppid_() (PID von Parent-Process) ausprobieren wollte.

Verfasst: 26.08.2009 19:52
von Andre
Kann zufällig jemand die MacOS-Varianten dieses Codes posten?

(Denn wenn ich mich nicht total täusche, dann gibt es diese Funktionen auch mit dem mittlerweile verfügbaren PB 4.40 beta nicht nativ, oder?)

Verfasst: 26.08.2009 20:09
von ts-soft
MultiPlattform-mässig sollte es so gehen:

Code: Alles auswählen

Procedure.s ExePath()
  ProcedureReturn GetPathPart(ProgramFilename())
EndProcedure

Procedure.s ExeName()
  ProcedureReturn GetFilePart(ProgramFilename())
EndProcedure

Debug ExePath()
Debug ExeName()
:wink:

Gruß
Thomas

Verfasst: 26.08.2009 20:12
von Andre
@ts-soft: Ich habs geahnt, dass ich was übersehen habe... :oops: Danke! :mrgreen: