GetPureBasicFolder() - PB-Ordner ermitteln!

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

GetPureBasicFolder() - PB-Ordner ermitteln!

Beitrag von al90 »

Eine relativ sichere methode um den PB-Folder zu ermitteln.
Läuft unter allen Windows versionen inkl. Vista. (Hoffe ich zumindest :mrgreen: )

Code: Alles auswählen

Procedure.s GetPureBasicFolder()

  Protected OpenKey.l, SubKey.s, hKey.l=0, keyvalue.s=Space(1024), DataSize.l=1024

  If OSVersion() = #PB_OS_Windows_Vista ; Windows Vista
    OpenKey=#HKEY_CURRENT_USER
    SubKey="Software\Classes\PureBasic.exe\shell\open\command\"
  ElseIf GetVersion_() & $FF0000 ; Windows XP/NT
    OpenKey=#HKEY_CLASSES_ROOT
    SubKey="Applications\PureBasic.exe\shell\open\command"
  Else ; Windows 9x
    OpenKey=#HKEY_LOCAL_MACHINE
    SubKey="Software\Classes\PureBasic.exe\shell\open\command"
  EndIf

  If RegOpenKeyEx_(OpenKey, SubKey, 0, #KEY_READ, @hKey)
    keyvalue=""
  Else
    If RegQueryValueEx_(hKey, "", 0, 0, @keyvalue, @DataSize)
      keyvalue=""
    Else
      keyvalue=Left(keyvalue, DataSize-1)
    EndIf
    RegCloseKey_(hKey)
  EndIf

  If keyvalue<>""
    ProcedureReturn GetPathPart(StringField(keyvalue, 2, #DOUBLEQUOTE$))
  EndIf

EndProcedure

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

Tut mir ja leid, aber hier eine erweiterte Version aus dem engl. Forum
(abgeleitet vom tailbite source: elchoni, gnozal, srod usw.)

Code: Alles auswählen

Procedure.s GetPBFolder(index = 0)
  Protected hKey1.l, Type.l, Res.l, Folder$, lpbData.l, cbData.l, PBRegKey.s
  cbData = 1024  ;The PB entry is really quite long!
  lpbData = AllocateMemory(cbData)
  Folder$=""
  hKey1=0
  Type=0
  Res=-1
  If lpbData
    Select OSVersion()
      Case #PB_OS_Windows_95,#PB_OS_Windows_98,#PB_OS_Windows_ME
        PBRegKey="Software\Classes\PureBasic.exe\shell\open\command"
        Res=RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, PBRegKey, 0, #KEY_ALL_ACCESS, @hKey1)
      Case #PB_OS_Windows_NT3_51,#PB_OS_Windows_NT_4,#PB_OS_Windows_2000,#PB_OS_Windows_Server_2003
        PBRegKey="Applications\PureBasic.exe\shell\open\command"
        Res=RegOpenKeyEx_(#HKEY_CLASSES_ROOT, PBRegKey, 0, #KEY_ALL_ACCESS, @hKey1)
      Case #PB_OS_Windows_XP, #PB_OS_Windows_Vista,#PB_OS_Windows_Server_2008,#PB_OS_Windows_Future
        PBRegKey="Software\Classes\PureBasic.exe\shell\open\command"
        Res=RegOpenKeyEx_(#HKEY_CURRENT_USER, PBRegKey, 0, #KEY_ALL_ACCESS , @hKey1)
    EndSelect
    If Res = #ERROR_SUCCESS And hKey1
      If RegQueryValueEx_(hKey1, "", 0, @Type, lpbData, @cbData)=#ERROR_SUCCESS
        Folder$ = PeekS(lpbData)
        Select index
          Case 0
            Folder$ = GetPathPart(StringField(Folder$,2,Chr(34)))
          Case 1
            Folder$ = StringField(Folder$,6,Chr(34))
          Case 2
            Folder$ = StringField(Folder$,8,Chr(34))
          Case 3
            Folder$ = StringField(Folder$,10,Chr(34))
        EndSelect
      EndIf
      RegCloseKey_(hKey1)
    EndIf
    FreeMemory(lpbData)
  EndIf
  ProcedureReturn Folder$
EndProcedure

;Index = 0 (default) to return the PB installation folder.
;Index = 1 to return the PB preferences filename.
;Index = 2 to return the templates preferences filename.
;Index = 3 to return the tools preferences filename.
Für PB-Tools Entwickler immer nützlich :allright:
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
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

Auch nicht schlecht. :allright:
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

danke für die beiden Codes :D
Win11 x64 | PB 6.20
Little John

Beitrag von Little John »

Hier ist eine Cross-Platform-Version.

Gruß, Little John
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 »

Little John hat geschrieben:Hier ist eine Cross-Platform-Version.

Gruß, Little John

Code: Alles auswählen

MessageRequester("", GetPBFolder())
ergibt ne leere Box :mrgreen:

Das funzt nicht, wenn Debugger off und Verzeichnis sonstwo :wink:

Kann man also nur einsetzen, wenn man auch Bedingungen stellt!
Ansonsten natürlich auch sehr nützlich :allright:
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
Little John

Beitrag von Little John »

ts-soft hat geschrieben:Das funzt nicht, wenn Debugger off und Verzeichnis sonstwo :wink:
Ja, steht auch so in der Dokumentation.

Gruß, Little John
Antworten