Entwickler-Ecke

Windows API - ...Umgebungsvariable in einem String auflösen?


Delete - Fr 14.11.03 09:58
Titel: ...Umgebungsvariable in einem String auflösen?
Hallo!

Ich habe mich gestern gewundert, warum eins meiner Programme unter XP meldet, dass es Symbole zu Verknüpfungen nicht finden kann. Des Rätsels Lösung waren Strings wie diese

Quelltext
1:
%SYSTEMROOT%\blablabla\Icon.ico                    

Da "FileExists" in dem Fall die Umgebungsvariable als String behandelt und nicht automatisch parst, klappt die Prüfung natürlich auch nicht. Aber da gibt´s Abhilfe aus dem System, und die nennt sich "ExpandEnvironmentString". Da es eine API-Funktion ist, bei der man mit Puffer und Puffergröße hantieren muss, hier eine einfache Umsetzung als Funktion:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function ExpandEnvStr(const szInput: string): string;
const
  MAXSIZE = 32768// laut PSDK sind 32k das Maximum
begin
  SetLength(Result,MAXSIZE);
  SetLength(Result,ExpandEnvironmentStrings(pchar(szInput),
    @Result[1],length(Result))-1); //-1 um abschließendes #0 zu verwerfen
end;

Der kann man den String (s. oben) übergeben

Delphi-Quelltext
1:
2:
3:
ShowMessage(
  ExpandEnvStr('%SYSTEMROOT%\blablabla\Icon.ico')
);

und erhält dann anstelle der Umgebungsvariablen ihren Inhalt, womit dann natürlich auch Dateiprüfungen usw. wieder funktionieren.

Siehe auch:
...systemweit Umgebungsvariablen setzen/lesen? [http://www.delphi-forum.de/viewtopic.php?t=18588]

Moderiert von user profile iconChristian S.: Hinweis von user profile iconJakob Schöttl zu #0 am Ende eingearbeitet