Pfad des gestarteten Programms ermitteln?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Pfad des gestarteten Programms ermitteln?

Beitrag von Dark Skillu »

Hallo wie kann ich den Pfad ermitteln von dem aus das Programm gestartet wurde? Danke om Voraus.

MfG DarkSkillu
Ich benutze PureBasic 4.0.
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 »

Versuch mal die Suchfunktion! Da bekommste so viele Antwoten, man kanns
kaum glauben
: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 »

Am einfachsten ist wohl

Code: Alles auswählen

ProgramFilename()
, dann kannse noch solceh Sachen benutzen:

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
Procedure.s GetAppName()
  AppName.s = Space(#MAX_PATH)
  GetModuleFileName_(GetModuleHandle_(0), @AppName, #MAX_PATH)
  ProcedureReturn GetFilePart(AppName)
EndProcedure
Procedure.s GetExePath() 
  Debug "GetExePath()"
  Protected ExePath.s = GetPathPart() 
  If LCase(ExePath) = LCase(#PB_Compiler_Home + "Compilers\")
    ExePath = GetCurrentDirectory() 
  EndIf 
  ProcedureReturn ExePath 
EndProcedure
...
Da gibt es viel ;)
//Edit: Ts war schneller, aber ich hab Beispiele ;)
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 »

>> //Edit: Ts war schneller, aber ich hab Beispiele
So werden die Einsteiger aber nie lernen erst zu suchen, dann zu fragen.

PS: Bis auf die erste Version sind alle nur Windows geeignet, die letzte
Version falsch oder erfordert UserLib?
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
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

Ich hab mal nach deinem 1.Post gesucht TS-Soft und nach "Pfad Programm" gesucht und was mit "Pfad einer Binary" gefunden, dann kam mir die Frage auf was überhaupt eine Binary ist , kann mir da jemand helfen? In diesem Thema war auch der zweite Code aus a14xerus Post glaube ich. Ich habe jetzt einfach mal Programfilename() benutzt und funktioniert auch so wie ich es mir vorgestellt habe. Danke!

MfG DarkSkillu

Edit: ich hab mit ProgramFilename() versucht die gestartete Exe zu kopieren und aufm Desktop wieder einzufügen, funktioniert aber noch nicht kann nmir jemand helfen bitte?

Code: Alles auswählen

Zieldatei$ = "C:\Dokumente und Einstellungen\Sebastian\Desktop"

Enumeration
  #Window_0
EndEnumeration


If OpenWindow(#Window_0, 216, 0, 276, 70, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(1, 20, 20, 240, 30, "")
      
  EndIf
EndIf
  
Repeat
  
  Event=WaitWindowEvent()
  
  If Event=#PB_Event_CloseWindow
   quit=1
  EndIf
  
  Select Event
  Case #PB_Event_Gadget
  Select EventGadget()
  
  Case 1
  
  ergebnis$ = ProgramFilename()
  Debug ergebnis$
  
  CopyFile(ergebnis$, Zieldatei$)
  
  EndSelect
  EndSelect
  
Until quit=1

Ich benutze PureBasic 4.0.
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

Ich verwende folgende Routine. Der Vorteil ist, dass der Pfad auch beim temporären Compilieren stimmt.

Code: Alles auswählen

Procedure.s GetProgramDirectory() ; Program Path
  Protected ProgDir.s, TempDir.s = Space(#MAX_PATH)
  GetTempPath_(#MAX_PATH,@TempDir)
  ProgDir = GetPathPart(ProgramFilename())
  If ProgDir = #PB_Compiler_Home+"Compilers\" Or ProgDir = TempDir
    ProgDir = GetCurrentDirectory()
  EndIf
  ProcedureReturn ProgDir
EndProcedure
Zuletzt geändert von Thorsten1867 am 11.06.2007 17:07, insgesamt 1-mal geändert.
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

Danke aber die Routine evrstehe ich sowieso nicht was ist denn der fehler bei mir so müsste es doch auch gehen oder?
Ich benutze PureBasic 4.0.
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

Das Desktopverzeichnis ist auf jedem Computer anders:

Code: Alles auswählen

Procedure.s GetDesktopDir()
  location$ = Space (#MAX_PATH)
  *itemid.Long = #Null
  If SHGetSpecialFolderLocation_ (0, 0, @*itemid) = #NOERROR
    If SHGetPathFromIDList_ (*itemid, @location$)=#False
      location$=""
    EndIf
  Else
    location$=""
  EndIf
  ProcedureReturn location$
EndProcedure

prog$ = ProgramFilename()
 
CopyFile(prog$, GetDesktopDir() + "\" + GetFilePart(prog$)) 
PS: Normalerweise erstellt man einen Shortcut (Verknüpfung) auf dem Desktop und kopiert nicht die Datei dorthin.
Zuletzt geändert von Thorsten1867 am 11.06.2007 17:06, insgesamt 1-mal geändert.
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
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 »

<offtopic>

Code: Alles auswählen

location$ = Space (#MAX_PATH+1) 
Wofür ist das niedliche, aber unnütze +1?
Am ende jedes Strings in PB befindet sich das erforderliche Nullbyte :mrgreen:
Welches Schaf hat damit angefangen
</offtopic>
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
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

ts-soft hat geschrieben:<offtopic>

Code: Alles auswählen

location$ = Space (#MAX_PATH+1) 
Wofür ist das niedliche, aber unnütze +1?
Am ende jedes Strings in PB befindet sich das erforderliche Nullbyte :mrgreen:
Welches Schaf hat damit angefangen
</offtopic>
Ich glaube, dass habe ich aus JaPBe 'geklaut' und für meine Zwecke abgeändert. :wink:
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Antworten