Pfad des gestarteten Programms ermitteln?

Anfängerfragen zum Programmieren mit PureBasic.
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 »

Thorsten1867 hat geschrieben: Ich glaube, dass habe ich aus JaPBe 'geklaut' und für meine Zwecke abgeändert. :wink:
Dann darfste jetzt von mir klauen :mrgreen:

Code: Alles auswählen

Procedure.s GetDesktopDir()
  Protected *itemid.ITEMIDLIST
  Protected location.s = Space(#MAX_PATH)

  If SHGetSpecialFolderLocation_ (0, #CSIDL_DESKTOP, @*itemid) = #NOERROR
    If SHGetPathFromIDList_(*itemid, @location)
      If Right(location, 1) <> "" : location + "" : EndIf
      ProcedureReturn location
    EndIf
  EndIf
EndProcedure
Bei MemoryAllokierung würde das + 1 Sinn machen
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
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Thorsten1867 hat geschrieben:Ich verwende folgende Routine. Der Vorteil ist, dass der Pfad auch beim temporären Compilieren stimmt.
Klickste in der IDE in den Compiler-Einstellungen an, dass die EXE im selben Ordner wie der Source reinkompiliert werden soll, dann kannste auch ProgramFile() benutzen und bis um einen Befehl plattform-unabhängiger. :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
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 »

>> und bis um einen Befehl plattform-unabhängiger
Vielleicht mal testen AND, seine Funktion ist plattformunabhängig :mrgreen:

// Nachtrag: Fast

Code: Alles auswählen

Procedure.s GetExePath() ; Program Path
  Protected ProgDir.s = GetPathPart(ProgramFilename())
  Protected TempDir.s = GetTemporaryDirectory()
   If UCase(ProgDir) = UCase(#PB_Compiler_Home + "COMPILERS\") Or ProgDir = TempDir
    ProgDir = GetCurrentDirectory()
  EndIf
  ProcedureReturn ProgDir
EndProcedure
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:Protected TempDir.s = GetTemporaryDirectory()
Das funktioniert bei mir seltsamerweise nicht.
Das Programmverzeichnis ist bei mir abgekürzt ("...~...") und TempDir nicht, womit der Vergleich daneben geht. :cry:

Code: Alles auswählen

C:\DOKUME~1\thorsten\LOKALE~1\Temp\
C:\Dokumente und Einstellungen\thorsten\Lokale Einstellungen\Temp\
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 »

@Thorsten
Dann haste irgendeinen Registry-Schalter verdreht :mrgreen:

Code: Alles auswählen

Debug GetPathPart(ProgramFilename())
Debug GetTemporaryDirectory()
Debugger-Ausgabe hat geschrieben:C:\Dokumente und Einstellungen\Thomas\Lokale Einstellungen\Temp\
C:\Dokumente und Einstellungen\Thomas\Lokale Einstellungen\Temp\
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
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> // Nachtrag: Fast
Fast <> Ganz :mrgreen:

Ich persönlich bin der Meinung, dass GetPathPart(ProgramFilename()) (auch als Macro verpackt), genügt, zumal man dan den "Ballast" (damit meine ich das Vergleichen, ob man sich im Compilers-Verzeichnis befindet und das manuelle hinzufügen des eventuell fehlenden Backslashes) spart.
Das ganze natürlich unter Verwendung der Option, die in den Compiler-Einstellungen zu finden ist (PB IDE 4.10).
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
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 »

Ich spare mir lieber den Ballast in meiner Firewall, 3 temporäre Exen mit
häufigen Änderungen im Temp sind mir lieber als wenn die Firewall für jedes
Source-Verzeichnis diese Einträge generiert, bzw. ich nachfragen
beantworten muß.
Temp ist ja auch für sowas vorgesehen, aber da sollte jeder sich das
aussuchen, was für ihn die meisten Vorteile beinhaltet.
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
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Da könnte man sich drüber streiten.
Aber dfas lass ich mal lieber... :lol:
Also im Hinblick auf das Ergebnis für den "Kunden", schenk ich mir die Firewaleinträge und lasse das immer zu, denn ich weiß ja selbst am besten was für ein zeuch ich da zusammenprogrmmiere.
Außerdem werde ich so meinem performantem Ruf gerecht... :lol:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
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:@Thorsten
Dann haste irgendeinen Registry-Schalter verdreht :mrgreen:
Scheint ein JaPBe - Problem zu sein. Mit der PB-IDE bekomme ich auch das gleiche Ergebnis wie du.
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 »

@AND
Wenn Du keine richtige Firewall kennst, dann laß es doch einfach. Ich nutze
nicht die WindowsFirewall, die würde ich nicht mal als sowas bezeichnen.
Bei jeder Compilierung wird die Exe verändert und somit die Einstellungen
ungültig, da es nicht mehr dieselbe Datei ist. Ich müßte als in jedem Source
Ordner mind. 3 Dateien freigegeben mit dem Vermerk "Häufige Änderungen
ignorieren"
Das spare ich mir lieber, genauso wie die unnütze Windows-Firewall :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
Antworten