Hallo!
Ich habe mit folgender Funktion das virtuelle Verzeichnis von z.B. CSIDL_PROGRAMS ermittelt!
Delphi-Quellcode:
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;
SHGetSpecialFolderLocation(hWindow, Folder, pidl);
GetMem(Path, MAX_PATH);
SHGetPathFromIDList(pidl, Path);
Result := Path;
FreeMem(Path);
pMalloc.Free(pidl);
end;
procedure desktopview;
var Handle: HWND;
FileInfo: TSHFileInfo;
PIDL: PItemIDList;
begin
CSIDLPROGRAMS:=(GetSpecialFolder(
Handle, CSIDL_PROGRAMS));
Und mit Hilfe der Variablen "CSIDLPROGRAMS" und einer rekursieven Funktion kann man dann das gesammt Verzeichnis auslesen! Bei CSIDL_CONTROL geht das aber nicht!
Gruß
max666