Wie kann ich Systemvariable nutzen

Anfängerfragen zum Programmieren mit PureBasic.
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

Wie kann ich Systemvariable nutzen

Beitrag von HoDam »

Die *ini -Datei die ich auslesen möchte steht grundsätzlich im Windowsverzeichnis.

Da dieses in Abhängigkeit vom OS (englisch, deutsch, andere Sprachen
bzw. der Installation verschiedene Bezeichungen haben kann, kann ich diesen Ort nicht fest programmieren.

Der Versuch über %systemroot% (windir) funktioniert bei mir nicht.


Beispiel:

Code: Alles auswählen

OpenPreferences("%Systemroot%\CTEXE.ini") 
Wie kann ich diese Datei ansprechen, unabhängig davon in welchem Arbeitsverzeichnis ich mich befinde


Danke
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Wie kann ich Systemvariable nutzen

Beitrag von Danilo »

HoDam hat geschrieben:Der Versuch über %systemroot% (windir) funktioniert bei mir nicht.

Code: Alles auswählen

Procedure.s GetWinDir()
  dir$ = Space(#MAX_PATH)
  GetWindowsDirectory_(@dir$,#MAX_PATH)
  ProcedureReturn dir$
EndProcedure

Procedure.s GetSysDir()
  dir$ = Space(#MAX_PATH)
  GetSystemDirectory_(@dir$,#MAX_PATH)
  ProcedureReturn dir$
EndProcedure

Procedure.s GetSysVar(var$)
  out$ = Space(1024)
  GetEnvironmentVariable_(var$,out$,2048)
  ProcedureReturn out$
EndProcedure

Debug GetWinDir()
Debug GetSysDir()
Debug GetSysVar("systemroot")
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Wenn wir gerade dabei sind wie kann man z.B. den ordner des benutzers rausfinden?
also bei mir z.B.
C:\Dokumente und einstellungen\zigapeda\Eigene Dateien
geht das auch mit einer Winapi oder geht das nur wenn man erst den Benutzernamen rausfindet und dann den pfad zusammenbaut?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

zigapeda hat geschrieben:Wenn wir gerade dabei sind wie kann man z.B. den ordner des benutzers rausfinden?
also bei mir z.B.
C:\Dokumente und einstellungen\zigapeda\Eigene Dateien

Code: Alles auswählen

#CSIDL_MYMUSIC                  = $000d      ;// "My Music" folder
#CSIDL_APPDATA                  = $001A      ;// Application Data, new For NT4
#CSIDL_LOCAL_APPDATA            = $001C      ;// non roaming, user\Local Settings\Application Data
#CSIDL_INTERNET_CACHE           = $0020
#CSIDL_COOKIES                  = $0021
#CSIDL_HISTORY                  = $0022
#CSIDL_COMMON_APPDATA           = $0023      ;// All Users\Application Data
#CSIDL_WINDOWS                  = $0024      ;// GetWindowsDirectory()
#CSIDL_SYSTEM                   = $0025      ;// GetSystemDirectory()
#CSIDL_PROGRAM_FILES            = $0026      ;// C:\Program Files
#CSIDL_MYPICTURES               = $0027      ;// My Pictures, new For Win2K
#CSIDL_PROGRAM_FILES_COMMON     = $002b      ;// C:\Program Files\Common 
#CSIDL_COMMON_DOCUMENTS         = $002e      ;// All Users\Documents
#CSIDL_RESOURCES                = $0038      ;// %windir%\Resources\, For theme And other windows resources.
#CSIDL_RESOURCES_LOCALIZED      = $0039      ;// %windir%\Resources\<LangID>, For theme And other windows specific resources.
#CSIDL_COMMON_ADMINTOOLS        = $002f      ;// All Users\Start Menu\Programs\Administrative Tools
#CSIDL_ADMINTOOLS               = $0030      ;// <user name>\Start Menu\Programs\Administrative Tools


Procedure.s GetSpecialDir(dir)
  lib = OpenLibrary(#PB_Any,"shell32.dll")
  If lib
    dir$ = Space(#MAX_PATH)
    If CallFunction(lib,"SHGetFolderPathA",0,dir,0,0,@dir$)<>#S_OK
      dir$=""
    EndIf
    CloseLibrary(lib)
  EndIf
  ProcedureReturn dir$
EndProcedure


Procedure.s GetUserDir()
  #CSIDL_PERSONAL      = $0005 ; My Documents
  lib = OpenLibrary(#PB_Any,"shell32.dll")
  If lib
    dir$ = Space(#MAX_PATH)
    If CallFunction(lib,"SHGetFolderPathA",0,#CSIDL_PERSONAL,0,0,@dir$)<>#S_OK
      dir$=""
    EndIf
    CloseLibrary(lib)
  EndIf
  ProcedureReturn dir$
EndProcedure

Debug GetUserDir()

Debug "---"

Debug GetSpecialDir(#CSIDL_WINDOWS)
Debug GetSpecialDir(#CSIDL_SYSTEM)
Debug GetSpecialDir(#CSIDL_PROGRAM_FILES)
Debug GetSpecialDir(#CSIDL_APPDATA)
Debug GetSpecialDir(#CSIDL_LOCAL_APPDATA)
Debug GetSpecialDir(#CSIDL_INTERNET_CACHE)
Debug GetSpecialDir(#CSIDL_COOKIES)
Debug GetSpecialDir(#CSIDL_HISTORY)
Debug GetSpecialDir(#CSIDL_COMMON_APPDATA)
Debug GetSpecialDir(#CSIDL_MYPICTURES)
Debug GetSpecialDir(#CSIDL_PROGRAM_FILES_COMMON)
Debug GetSpecialDir(#CSIDL_COMMON_DOCUMENTS)
Debug GetSpecialDir(#CSIDL_RESOURCES)
Debug GetSpecialDir(#CSIDL_RESOURCES_LOCALIZED)
Debug GetSpecialDir(#CSIDL_COMMON_ADMINTOOLS)
Debug GetSpecialDir(#CSIDL_ADMINTOOLS)
Debug GetSpecialDir(#CSIDL_MYMUSIC)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

Beitrag von HoDam »

Danke Danilo

hat funktioniert
Antworten