unter Windowse kann man ja mit "set" Umgebungsvariablen setzen. Wie z.B. die PATH- oder die CLIENTNAME-Variable.
Wie kann ich die Variablen auslesen?
Code: Alles auswählen
Procedure.s getenv(var.s)
buff$=Space(256)
GetEnvironmentVariable_(var,buff$,256 )
ProcedureReturn var+" -> "+buff$
buff$=""
EndProcedure
Debug getenv("NUMBER_OF_PROCESSORS")
Debug getenv("PROCESSOR_ARCHITECTURE")
Debug getenv("PROCESSOR_IDENTIFIER")
Debug getenv("PROCESSOR_LEVEL")
Debug getenv("PROCESSOR_REVISION")
Debug getenv("OS")
Debug getenv("COMSPEC")
Debug getenv("HOMEDRIVE")
Debug getenv("HOMEPATH")
Debug getenv("PATH")
Debug getenv("PATHEXT")
Debug getenv("PROMPT")
Debug getenv("SYSTEMDRIVE")
Debug getenv("SYSTEMROOT")
Debug getenv("WINDIR")
Debug getenv("TEMP")
Debug getenv("TMP")
;unvollständige Liste
;Name Description System User Process (NT/2000) Process (98/ME)
;NUMBER_OF_PROCESSORS :: Number of processors running on the machine.
;PROCESSOR_ARCHITECTURE :: Processor type of the user's workstation.
;PROCESSOR_IDENTIFIER :: Processor ID of the user's workstation.
;PROCESSOR_LEVEL :: Processor level of the user's workstation.
;PROCESSOR_REVISION :: Processor version of the user's workstation.
;OS :: Operating system on the user's workstation.
;COMSPEC :: Executable file for the command prompt (typically cmd.exe).
;HOMEDRIVE :: Primary local drive (typically the C drive).
;HOMEPATH :: Default directory for users (typically \users\default in Windows 2000).
;PATH :: PATH environment variable.
;PATHEXT :: Extensions for executable files (typically .com, .exe, .bat, or .cmd).
;PROMPT :: Command prompt (typically $P$G).
;SYSTEMDRIVE :: Local drive on which the system directory resides (typically c:\).
;SYSTEMROOT :: System directory (for example, c:\winnt). This is the same as WINDIR.
;WINDIR :: System directory (for example, c:\winnt). This is the same as SYSTEMROOT.
;TEMP :: Directory for storing temporary files (for example, c:\temp).
;TMP :: Directory for storing temporary files (for example, c:\temp).
Ha! Hast recht... Aber das ist ja wohl ein Fehler in den API-Definitionen von PB, oder?bobobo hat geschrieben:aber nur wenn man auf polinkerrors steht
Code: Alles auswählen
; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=1643&highlight=
; Author: wichtel
; Date: 08. July 2003
; Umgebungsvariablen lesen und setzen
; (gesetzte Umgebungsvariablen werden an Unterprozesse übergeben,
; bleiben aber nach Programmende nicht erhalten und können auch nicht
; von bereits laufenden Programmen gelesen werden)
Structure envstruct
name.s
Value.s
EndStructure
NewList env.envstruct()
; gibt als Rückgabewert die Anzahl der Umgebungsvariablen zurück
; braucht ein vorher angelegte LinkedList vom Typ envstruct
Procedure.l myListEnv()
ret$=""
envcount.l=0
LibKernel.l=OpenLibrary(#PB_Any,"kernel32.dll")
If LibKernel=0
MessageRequester("DLL error","Kann kernel32.dll nicht öffnen")
ProcedureReturn 0
EndIf
envblock.l=CallFunction(LibKernel,"GetEnvironmentStringsA") ;GetEnvironmentStrings_()
ClearList(env())
Repeat
ret$=PeekS(envblock)
If ret$<>"" And Left(ret$,1)<>"=" And Left(ret$,1)<>":"
AddElement(env())
env()\name=StringField(ret$,1,"=")
env()\Value=StringField(ret$,2,"=")
EndIf
envblock+Len(ret$)+1
Until ret$=""
CloseLibrary(LibKernel)
ProcedureReturn CountList(env())
EndProcedure
; gibt als Rückgabewert den Wert der Umgebungsvariablen zurück
; oder einenLeerstring wenn die Variable nicht existiert
Procedure.s myGetEnv(name.s)
Value.s=Space(256)
size.l=Len(Value)
GetENVIRONMENTVariable_(@name, @Value, @size)
ProcedureReturn(Value)
EndProcedure
; gibt als Rückgabewert den Wert der Umgebungsvariablen zurück
; oder einenLeerstring wenn das Setzen nicht geklappt hat
Procedure.s mySetEnv(name.s,Value.s)
If SetENVIRONMENTVariable_(@name, @Value)
ProcedureReturn Value
Else
ProcedureReturn ""
EndIf
EndProcedure
OpenConsole()
; gezielt eine Umgebungsvariable abfragen
PrintN("lesen...")
PrintN("systemroot: "+myGetEnv("systemroot"))
; eine Umgebungsvariable setzen
PrintN("setzen...")
PrintN("MeineVariable: "+mySetEnv("MeineVariable","MeinWert"))
PrintN("")
PrintN("Eingabe druecken...")
Input()
PrintN("")
; alle Umgebungsvariablen in ein LinkedList und auflisten
PrintN("Auflisten...")
Anzahl.l=myListEnv()
PrintN(Str(Anzahl)+" Umgebungsvariablen")
PrintN("")
ResetList(env())
While NextElement(env())
PrintN(env()\name+": "+env()\Value)
Delay(300) ; da kann man besser zuschauen
Wend
PrintN("")
PrintN("Eingabe druecken...")
Input()
CloseConsole() Code: Alles auswählen
[...]
; Umgebungsvariablen lesen und setzen
; (gesetzte Umgebungsvariablen werden an Unterprozesse übergeben,
; bleiben aber nach Programmende nicht erhalten und können auch nicht
; von bereits laufenden Programmen gelesen werden)
[...]