Seite 1 von 1

GetPureBasicFolder() - PB-Ordner ermitteln!

Verfasst: 16.03.2009 23:04
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()

Verfasst: 16.03.2009 23:15
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:

Verfasst: 16.03.2009 23:27
von al90
Auch nicht schlecht. :allright:

Verfasst: 17.03.2009 17:35
von Andesdaf
danke für die beiden Codes :D

Verfasst: 17.03.2009 22:43
von Little John
Hier ist eine Cross-Platform-Version.

Gruß, Little John

Verfasst: 18.03.2009 06:40
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:

Verfasst: 18.03.2009 07:11
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