![]() |
Probleme mit Special Folder
Hallo,
ich nutze folgende Funktion, um Special Folders zu ermitteln:
Code:
Das funktioniert auch auf praktisch allen PCs wunderbar, bis auf einen einzigen mir bekannten Kunden-PC unter Windows XP. Da kommt immer ein leerer Pfad raus anstelle des gewünschten Pfads für die Gemeinsamen Dokumente (unter Win7 Bibliothek Gemeinsame Dateien).
const
CSIDL_COMMON_DOCUMENTS = $002e; function GetSpecialFolder(hWindow: HWND; Folder: Integer): String; var pMalloc: IMalloc; pidl: PItemIDList; Path: PChar; begin // get IMalloc interface pointer if (SHGetMalloc(pMalloc) <> S_OK) then begin MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.', 'SHGetMalloc(pMalloc)', 16); Exit; end; // retrieve path SHGetSpecialFolderLocation(hWindow, Folder, pidl); GetMem(Path, MAX_PATH); SHGetPathFromIDList(pidl, Path); Result := Path; FreeMem(Path); // free memory allocated by SHGetSpecialFolderLocation pMalloc.Free(pidl); end; Directory = GetSpecialFolder(Handle, CSIDL_COMMON_DOCUMENTS); Woran kann das liegen und wie bekomme ich auch auf dem Rechner den gewünschten Pfad? Laut Kundenangaben gibt es den Pfad, sogar an standardmäßiger Stelle, nur mein Delphi-Programm (d6) schafft es nicht, ihn zu ermitteln. Danke im Voraus! |
AW: Probleme mit Special Folder
Geht es mit dieser Funktion?
Delphi-Quellcode:
...
function SHGetFolderPathW(hwndOwner: HWND; nFolder: Integer; hToken: THandle; dwFlags: DWORD; pszPath: LPWSTR): HRESULT; stdcall; external 'shell32.dll' name 'SHGetFolderPathW'; ... function GetSpecialDirectory(CSIDL: Integer; Handle: Cardinal = 0): String; const SHGFP_TYPE_CURRENT = 0; var APIResult: HRESULT; Buffer: Array[0 .. MAX_PATH - 1] of WCHAR; begin Result := ''; APIResult := SHGetFolderPathW(Handle, CSIDL, 0, SHGFP_TYPE_CURRENT, Buffer); if APIResult = S_OK then Result := SysUtils.IncludeTrailingPathDelimiter(WideString(Buffer)); end; |
AW: Probleme mit Special Folder
Was bekommst du denn für einen Fehlercode, wenn SHGetPathFromIDList fehlschlägt?
|
AW: Probleme mit Special Folder
Erst einmal danke für die Antworten.
@Andreas: Ich habe meinem Kunden mal ein kleines Testprogramm geschickt, damit er das mal ausprobieren kann. @Luckie: Gibt es eine Möglichkeit, mehr zu erfahren als nur "Klappt" oder "Klappt nicht"? Ich kenne mich mit diesen Routinen vom Windows-System nicht mehr wirklich aus (überhaupt bin ich leider seit Jahren aus Delphi raus und fange gerade erst wieder damit an), und die Funktion stammt hier aus der Lib. |
AW: Probleme mit Special Folder
In der Doku steht nichts wie man an nähere Infos kommt. Aber versuch es mal mit GetLastError.
|
AW: Probleme mit Special Folder
Ich wollte hier Erfolg melden: Die Variante von Andreas funktioniert auf allen getesteten Systemen, auch auf dem des Kunden, wo die alte Version hier aus der Lib nicht lief.
Danke dafür :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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