masters: アイコン ハンドラー シェル拡張機能を登録して、dll を explorer.exe に挿入し、指定された拡張子名のファイルをデスクトップに配置しようとしています。Win7 では正常に動作しますが、Windows XP ではうまく動作しません。現象は次のとおりです。
- 初めて拡張機能を登録すると、dll が正常に挿入されます。
- システムを再起動すると、dll が explorer.exe によって読み込まれません。しかし、拡張子名で新しいファイルを作成すると、ロードできます。
デスクトップがファイルアイコンをキャッシュしていたので、アイコンを抽出するためにアイコンハンドラを呼び出す必要がないことが理由だと思います。デスクトップが指定されたファイルのアイコンをキャッシュしないようにするにはどうすればよいですか。
どうもありがとうございました。
以下は私のコードの一部です: // CShellIcon
HRESULT CShellIcon::GetIconLocation(UINT uFlags, LPWSTR szIconFile, UINT cchMax, LPINT piIndex, UINT* pwFlags)
{
// I inject the dll to subclass the desktop window
SubclassDesktop();
*piIndex = 0;
*pwFlags = GIL_DONTCACHE | GIL_NOTFILENAME | GIL_PERINSTANCE;
return S_FALSE;
}
HRESULT CShellIcon::Extract(LPCTSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize )
{
phiconLarge = NULL;
phiconSmall = NULL;
return S_OK;
}