Seite 1 von 3

Pfad des gestarteten Programms ermitteln?

Verfasst: 11.06.2007 15:00
von Dark Skillu
Hallo wie kann ich den Pfad ermitteln von dem aus das Programm gestartet wurde? Danke om Voraus.

MfG DarkSkillu

Verfasst: 11.06.2007 15:03
von ts-soft
Versuch mal die Suchfunktion! Da bekommste so viele Antwoten, man kanns
kaum glauben
:mrgreen:

Verfasst: 11.06.2007 15:08
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 ;)

Verfasst: 11.06.2007 15:20
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?

Verfasst: 11.06.2007 15:26
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


Verfasst: 11.06.2007 15:45
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

Verfasst: 11.06.2007 15:52
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?

Verfasst: 11.06.2007 16:32
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.

Verfasst: 11.06.2007 16:43
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>

Verfasst: 11.06.2007 17:02
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: