2

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を取得できるかどうか疑問に思います。

または、ファイルのアイコンを取得する他の方法はありますか?

4

1 に答える 1

4

あなたは確かにILCombineDelphiから呼び出すことができます。ShlObjユニットを使用する必要があります。

uses
  ShlObj;
....
pidItemAbsolute = ILCombine(pidworkDir, pidChild);

Delphiが宣言していない場合ILCombineは、次のようにインポートできます。

function ILCombine(pidl1, pidl2: PItemIDList): PItemIDList; 
    stdcall; external 'shell32.dll';
于 2012-10-31T12:21:11.320 に答える