アイコン

アイコンの取得に時間がかかるかどうか判定する方法を見つけた。
IShellIcon::GetIconOfでIExtractIcon::GetIconLocationの
パラメーターを使うというもの。
MSDNには記載されていないので邪道かもしれない。



int icon;
IShellIcon* si;
hr = sf->QueryInterface(IID_IShellIcon, (void**)&si);
if (hr == S_OK) {
// ここでGIL_ASYNCを使うのがミソ
switch (si->GetIconOf(fi->_il, GIL_ASYNC, &icon)) {
case NOERROR:
// アイコンを速く取得できた場合
break;
case E_PENDING:
// アイコンの取得が遅い場合
// この場合imageは未定義のindexが代入されている
break;
case S_FALSE:
// 取得できない場合がある
break;
}
} else {
// IShellIcon*が取得できない場合がある。
}