Speicherort des Programms ermitteln

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Speicherort des Programms ermitteln

Beitrag von benpicco »

Wie kann ich rausbekommen, wo die exe Datei, die mein Programm ist und ausgeführt wird, gespeichert ist, dass ich dateien aus diesem Ordner kopieren kann?
Gibt´s da sowas wie %homedir% ?
Wenn ja, soll ich dann einfach copyfile("%...%ordner",zzielordner$) schreiben?
:?
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Speicherort des Programms ermitteln

Beitrag von Kiffi »

benpicco hat geschrieben: Wie kann ich rausbekommen, wo die exe Datei, die mein Programm ist
und ausgeführt wird, gespeichert ist :?

Code: Alles auswählen

Procedure.s GetAppPath()
  ProgrammPfad.s = Space(255)
  GetCurrentDirectory_(255, @ProgrammPfad)
  If Right(ProgrammPfad,1) <> ""
    ProgrammPfad + ""
  EndIf
  ProcedureReturn ProgrammPfad 
EndProcedure

Debug GetAppPath()
Grüße ... Kiffi
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Danke, aber gibt´s das auch in ner demofreundlichen Version? :D
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Das hier sollte auch mit der Demo funzen :)

Code: Alles auswählen

Procedure.s GetAppPath() 
    If OpenLibrary(0,"kernel32.dll")
        *ptrGetDir = IsFunction(0,"GetCurrentDirectoryA")
        If *ptrGetDir
            ProgrammPfad.s = Space(255) 
            CallFunctionFast(*ptrGetDir,255, @ProgrammPfad)
            If Right(ProgrammPfad,1) <> "\" 
                ProgrammPfad + "\" 
            EndIf 
        EndIf 
        CloseLibrary(0)
    EndIf 
    ProcedureReturn ProgrammPfad 
EndProcedure 

Debug GetAppPath()
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 »

am besten noch das space(255) durch space(360) bzw. #MAX_PATH ersetzen !
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
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Danke, perfekt!
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
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 »

Gerade erst gesehen, das aktuelle Verzeichnis und das Programm Verzeichnis müssen nicht übereinstimmen. Deshalb hier nochmal der Code für die Demo:

Code: Alles auswählen

Procedure.s GetAppDir()
  FullPath.s = Space(360)
  DLL = OpenLibrary(#PB_Any, "Kernel32")
  CallFunction(DLL, "GetModuleFileNameA", CallFunction(DLL, "GetModuleHandleA", 0), @FullPath, 360)
  CloseLibrary(DLL)
  FullPath = GetPathPart(FullPath)
  If Right(FullPath, 1) <> "\" : FullPath + "\" : EndIf
  ProcedureReturn FullPath
EndProcedure

Debug GetAppDir()
und der Code für die Vollversion:

Code: Alles auswählen

Procedure.s GetAppDir()
  FullPath.s = Space(#MAX_PATH)
  GetModuleFileName_(GetModuleHandle_(0), @FullPath, #MAX_PATH)
  FullPath = GetPathPart(FullPath)
  If Right(FullPath, 1) <> "\" : FullPath + "\" : EndIf
  ProcedureReturn FullPath
EndProcedure

Debug GetAppDir()
Achtung: in der Entwicklungsumgebung wird der Pfad des PBCompilers zurückgegeben!

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
Antworten