Autor Beitrag
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 14.11.03 09:58 
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
ausblenden 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:
ausblenden 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
ausblenden 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?

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