![]() |
AW: Pfad mit GUID (KnownFolderId) umwandeln in vollen Pfad
Zitat:
SHGetKnownFolderPath hatte ich ja schon im Eingangsposting erwähnt und das ist auch kein Problem - man muss aber eben "drumherum arbeiten": Zerlegen, GUID prüfen/umwandeln und wieder zusammensetzen. Wenn es aber ein Pendant zu ExpandEnvironmentStrings (was den String als Ganzes nimmt) gäbe, würde ich das bevorzugen, weil es einfach die sauberere Lösung wäre. Da es für mich naheliegend war, dass es sowas geben müsste, ich es aber nicht gefunden hatte, habe ich hier nachgefragt, ob jemand sowas kennt. |
AW: Pfad mit GUID (KnownFolderId) umwandeln in vollen Pfad
Delphi-Quellcode:
löst quasi Makros auf, die auch an jeder beliebigen Stelle im Text auftauchen können.
ExpandEnvironmentStrings
Die CSIDL oder (neuer) KnownFolder können nur am Anfang auftauchen. Aus dem Grund gibt es wohl keine vorgefertigten API-Aufruf der diese Werte dann ersetzt. Sind aber auch nur eine gute Handvoll Zeilen um das zu bewerkstelligen. |
AW: Pfad mit GUID (KnownFolderId) umwandeln in vollen Pfad
Danke für die Zusatzinfos!
Ich habe mir das jetzt mal so zusammengebastelt, dass ich eine universelle Funktion habe, um Pfade vollständig umzuwandeln. Falls es noch jemand brauchen kann:
Delphi-Quellcode:
function ExpandPath(const sPath: String): String;
var chrBuffer: LPWSTR; chrOut: array[0..1023] of Char; sGUID, sRest: String; GUID: TGUID; begin Result := sPath; if AnsiStartsText('{', Result) and isWinVistaOrLater then begin sGUID := Copy(Result, 0, Pos('}',Result)); //z.B. '{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}' = 'C:\Program Files (x86)' sRest := Copy(Result, Pos('}',Result)+1, Length(Result)); try GUID := StringToGUID(sGUID); if Succeeded(SHGetKnownFolderPath(GUID, 0, 0, chrBuffer)) then begin try Result := chrBuffer + sRest; finally CoTaskMemFree(chrBuffer); end; end; except end; end; if AnsiContainsText(Result,'%') then begin if ExpandEnvironmentStrings(PChar(Result), chrOut, 1024) > 0 then Result := chrOut; end; Result := Trim(Result); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz