masters:我正在尝试通过注册图标处理程序外壳扩展名将 dll 注入 explorer.exe,并将具有指定扩展名的文件放入桌面。在win7下运行良好,在windows xp下就不行了。现象是:
- 当第一次注册扩展时,dll注入成功。
- 重启系统时,explorer.exe 不加载dll。但是如果我用扩展名创建一个新文件,它可以被加载。
我猜是桌面缓存了文件图标的原因,所以它不需要调用 iconhandler 来提取图标。那么如何防止桌面缓存指定文件的图标。
非常感谢你的帮助。
以下是我的部分代码:// 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;
}