0

masters:我正在尝试通过注册图标处理程序外壳扩展名将 dll 注入 explorer.exe,并将具有指定扩展名的文件放入桌面。在win7下运行良好,在windows xp下就不行了。现象是:

  1. 当第一次注册扩展时,dll注入成功。
  2. 重启系统时,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; 
} 
4

0 回答 0