Wie kann ich die Umgebungsvariablen auslesen?
Wie kann ich die Umgebungsvariablen auslesen?
Hallo zusammen,
unter Windowse kann man ja mit "set" Umgebungsvariablen setzen. Wie z.B. die PATH- oder die CLIENTNAME-Variable.
Wie kann ich die Variablen auslesen?
unter Windowse kann man ja mit "set" Umgebungsvariablen setzen. Wie z.B. die PATH- oder die CLIENTNAME-Variable.
Wie kann ich die Variablen auslesen?
Re: Wie kann ich die Umgebungsvariablen auslesen?
> Wie kann ich die Variablen auslesen?
http://www.purearea.net/pb/german/sr_vi ... lValues.pb
und
http://www.purearea.net/pb/german/sr_vi ... riables.pb
Grüße ... Kiffi
http://www.purearea.net/pb/german/sr_vi ... lValues.pb
und
http://www.purearea.net/pb/german/sr_vi ... riables.pb
Grüße ... Kiffi
- AndyMars
- Beiträge: 139
- Registriert: 08.09.2004 11:59
- Computerausstattung: Win10 Home 64bit, i7-2600k @ 3.4 GHz, 8GB RAM, AMD Radeon R9 200
- Wohnort: Zürich, Schweiz
- Kontaktdaten:
Da gibt's API-Funktionen - alles schon da gewesen - im alten Forum
http://www.robsite.de/php/pureboard-arc ... php?t=1643
Edit: Muss immer einer schneller sein? Das PureAre.net ist natürlich auch immer 'ne gute Quelle... Siehe Links oben rechts ;>>
http://www.robsite.de/php/pureboard-arc ... php?t=1643
Edit: Muss immer einer schneller sein? Das PureAre.net ist natürlich auch immer 'ne gute Quelle... Siehe Links oben rechts ;>>
Zuletzt geändert von AndyMars am 22.09.2004 13:45, insgesamt 1-mal geändert.
Grüsse von AndyMars
aber nur wenn man auf polinkerrors steht zumindest mit PB3.91
wenn die Environmentstring bekannt sind dann kann man die hiermit auslesen
Die Maximumgröße eine Environmentvariable ist 32767 (inkl. NullTerminator)
buff$ zu groß lässt bei mir lustigerweise allerdings den Grafiktreiber abschmieren ..
wenn die Environmentstring bekannt sind dann kann man die hiermit 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).
buff$ zu groß lässt bei mir lustigerweise allerdings den Grafiktreiber abschmieren ..
pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
- AndyMars
- Beiträge: 139
- Registriert: 08.09.2004 11:59
- Computerausstattung: Win10 Home 64bit, i7-2600k @ 3.4 GHz, 8GB RAM, AMD Radeon R9 200
- Wohnort: Zürich, Schweiz
- Kontaktdaten:
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
Man kann's ja auch selber machen (leicht abgeändert von purearea.net):
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()
Grüsse von AndyMars
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)
[...]
Danke & Grüße ... Kiffi
@AndyMars
geil das
@Kiffi
neben dem Einstellen der SystemVariablen sagt das PSD :
Calling SetEnvironmentVariable has no effect on the system environment variables. The user can add or modify system environment variables using the Control Panel. To programmatically add or modify system environment variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key, then broadcast a WM_SETTINGCHANGE message. This allows applications, such as the shell, to pick up your updates.
geil das
@Kiffi
neben dem Einstellen der SystemVariablen sagt das PSD :
Calling SetEnvironmentVariable has no effect on the system environment variables. The user can add or modify system environment variables using the Control Panel. To programmatically add or modify system environment variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key, then broadcast a WM_SETTINGCHANGE message. This allows applications, such as the shell, to pick up your updates.
pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Tach auch, würde mich mal interessieren warum der alte code in 3.91 nicht mehr geht.
Wollte gerade ein Programm schreiben dass das unter Windows und Linux kann.
Unter Linux habe ich es jetzt hinbekommen und dachte unter Windows nehme ich einfach den alten code.....
mmh.
edit:
und warum zeigt mir nur der Original Editor den Fehler an, und jaPBe nur einen Linker error "no message"?
Wollte gerade ein Programm schreiben dass das unter Windows und Linux kann.
Unter Linux habe ich es jetzt hinbekommen und dachte unter Windows nehme ich einfach den alten code.....
mmh.
edit:
und warum zeigt mir nur der Original Editor den Fehler an, und jaPBe nur einen Linker error "no message"?
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en