Hallo,
ich nutze folgende Funktion, um Special Folders zu ermitteln:
Code:
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);
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).
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!