(WinAPI) Pfad + Name des eigenen Programmes ermitteln

Hier kannst du häufig gestellte Fragen/Antworten und Tutorials lesen und schreiben.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

(WinAPI) Pfad + Name des eigenen Programmes ermitteln

Beitrag 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)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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:.
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Jo, geht auch. Habs allerdings so gemacht weil ich es auch mit getppid_() (PID von Parent-Process) ausprobieren wollte.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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?)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
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 »

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
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
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

@ts-soft: Ich habs geahnt, dass ich was übersehen habe... :oops: Danke! :mrgreen:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten