| |
|
|
Michael W. | Da ich mehrmals über diesen Registry-Typ gestolpert bin, habe ich einfach mal zwei Möglichkeiten getestet um an den korrekten String zu gelangen.
Declare string s
Cls
Print " ---------- ExpandEnvStr$(\q%path%\q)"
Print "PATH =",ExpandEnvStr$("%path%")
Print " ----- "
Print "AppData =",ExpandEnvStr$("%APPDATA%")
Print " ----- "
Print "UserProfile =",ExpandEnvStr$("%USERPROFILE%")
Print " ----- "
Print "Computername =",ExpandEnvStr$("%COMPUTERNAME%")
Print " ---------- GetEnvVars$()"
s = GetEnvVars$()
Print s
Print "Das sind", Len( s, "," ), "Environment-Variablen."
Print " ---------- ExpandEnvPath$(\q%APPDATA%\XProfan\Test\Test.data\q)"
Print ExpandEnvPath$("%APPDATA%")
Print " ---------- "
WaitKey
End
// intern
// Wert$ = GetEnv$(EnvVar$)
// SetEnv EnvVar$, Wert$
Proc ExpandEnvStr$
// einen Registry-String des Typs REG_EXPAND_SZ enträtseln
// s = ExpandEnvStr("%path%")
// Groß-/Kleinschreibung der Env-Variablen-Namen ist egal.
Parameters string EnvStr
Declare mem inbuf,outbuf, int Size, string erg
Size = 32768// max.
Dim inbuf,Size
Dim outbuf,Size
String inbuf,0 = EnvStr
External("kernel32.dll","ExpandEnvironmentStringsA", inbuf, outbuf, Size)
erg = String$(outbuf,0)
Dispose inbuf,outbuf
Return erg
EndProc
Proc GetEnvVars$
// Liefert einen Komma-saparierten String
// mit allen Variablennamen des Environments zurück
// s = GetEnvVars$()
Declare mem buf
Declare long Size, EnvAdr, p, i
Declare string s, tmp, erg
Size = 32768// max.
Dim buf,Size
EnvAdr = External("kernel32.dll","GetEnvironmentStringsA")
buf = EnvAdr// bearbeiten mittels Bereich
Clear p, erg
s = String$(buf,p)
While Len(s) > 0
tmp = Trim$(SubStr$(s,1,"="))
Case Len(tmp) : erg = erg + "," + tmp
Inc p, Len(s) + 1
s = String$(buf,p)
EndWhile
Dispose buf
External("kernel32.dll","FreeEnvironmentStringsA",EnvAdr)
Case Len(erg) : erg = Del$(erg,1,1)
Return erg
EndProc
// der hier will bei mir leider nicht...
Proc ExpandEnvPath$
// Ersetzt bestimmte Ordnernamen in einen vollständig qualifizierten Pfad mit ihren zugehörigen Werten.
// s = ExpandEnvPath$("%APPDATA%\XProfan\Test\Test.data")
// ALLUSERSPROFILE, APPDATA, COMPUTERNAME, ProgramFiles, SystemDrive, SystemRoot, USERPROFILE
// Die Werte existieren nicht in allen Environments. Was nicht existiert, wird einfach nicht übersetzt.
// %ALLUSERSPROFILE - der "ALL USERS" Profilordner
// %APPDATA% - Ordner für Anwendungsdaten des aktuellen Benutzers (Vista u höher)
// %COMPUTERNAME% - der Systemname
// %ProgramFiles% - der "Program Files" Ordner (Programmdateien)
// %SystemDrive% - der System-Laufwerksbuchstabe (z.B. C:)
// %SystemRoot% - der System-Stamm-Ordner (z.B. C:\Windows)
// %USERPROFILE% - das aktuelle Benutzer-Profil (z.B. C:\USERS\<username>)
Parameters string EnvPath
Declare mem inbuf,outbuf, int Size,Ok, string erg
Size = 32768// max.
Dim inbuf,Size
Dim outbuf,Size
String inbuf,0 = EnvPath
Ok = External("shlwapi.dll","PathUnExpandEnvStringsA", inbuf, outbuf, Size)
Case Ok : erg = String$(outbuf,0)
Dispose inbuf,outbuf
Return erg
EndProc
Na bitte, geht doch (zumindest einer davon)
Keywords: Environment, ExpandEnvironmentStrings |
|
|
| |
|
|