特定の種類のファイルのアイコンが必要な場合は、SHGetFileInfo
. たとえば、テキスト ファイルのアイコンを取得するには、次のようにします。
SHFILEINFO sfi;
if (SHGetFileInfo(L".txt", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES ))
{
// you now have the icon in sfi.hIcon
// remember to destroy it when you are done with it
DestroyIcon(sfi.hIcon);
}
SHGFI_ICON
フラグは、大きなアイコンが必要であることを示しています。フラグを追加しSHGFI_SMALLICON
て小さなアイコンを取得できます。
SHGFI_USEFILEATTRIBUTES
渡すファイル名が存在する必要がないことを示します。関数は、特定の既存のファイルではなく、ファイル クラスのアイコンを返します。特定のファイルのアイコンが必要な場合は、ファイルのフル パス名をSHGetFileInfo
関数に渡し、このフラグを省略します。
ごみ箱のようなシステム フォルダのアイコンが必要な場合は、この関数でそれも実行できます。例えば:
LPITEMIDLIST pidl;
if (SUCCEEDED(SHGetFolderLocation(0, CSIDL_BITBUCKET, 0, 0, &pidl)))
{
SHFILEINFO sfi;
if (SHGetFileInfo((LPCWSTR)pidl, 0, &sfi, sizeof(sfi), SHGFI_ICON | SHGFI_PIDL))
{
// you now have the icon in sfi.hIcon
// remember to destroy it when you are done with it
DestroyIcon(sfi.hIcon);
}
CoTaskMemFree(pidl);
}
SHGetFileInfo
フラグの完全なリストについては、ドキュメントを参照してください。また、これらの関数を使用する前に、COM を呼び出しOleInitialize()
たりCoInitializeEx()
、COM を初期化したことを確認してください。