Windowsのコントロールパネルアイコンを取得するために使用したい、SHGetFileInfo
Windowsのコントロールパネルを取得するためにシェルを使用するコード:
var
psfDeskTop: IShellFolder;
psfWork: IShellFolder;
pidworkDir: PITEMIDLIST;
pidChild: PITEMIDLIST;
pEnumList: IEnumIDList;
celtFetched: ULONG;
//chEaten, dwAttributes: ULONG;
FileInfo: SHFILEINFOW;
//conGUID: string;
StrRetName: TStrRet;
Name: PChar;
begin
SHGetDesktopFolder(psfDeskTop);
SHGetSpecialFolderLocation(0, CSIDL_CONTROLS, pidworkDir);
psfDeskTop.BindToObject(pidworkDir, nil, IID_IShellFolder, psfWork);
psfWork.EnumObjects(0, SHCONTF_NONFOLDERS or SHCONTF_FOLDERS or SHCONTF_INCLUDEHIDDEN, pEnumList);
while pEnumList.Next(1, pidChild, celtFetched) = 0 do
begin
//here I want to use SHGetFileInfo to get file icon
//but , SHGetFileInfo need a absolute PIDL,IEnumIDList enumerates relative PIDL
end
end;
これを行うためにMSDNでILCombineという関数を見つけましたが、Delphiでは見つかりません。pidworkDirとpidChildを組み合わせてDelphiで絶対PIDLを取得できるかどうか疑問に思います。
または、ファイルのアイコンを取得する他の方法はありますか?