- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们读取 GetOverlayInfo()
中的注册表项和IsMemberOf()
方法来确定是否显示覆盖图标。从这两个方法中我们返回 S_FALSE
如果未设置注册表项。
问题是当 GetOverlayInfo()
称为注册表项未设置,但稍后在 session 中设置。我注意到一次GetOverlayInfo()
返回S_FALSE
,shell 不调用 IsMemberOf()
更远。
此注册表项是从不同的进程(我们的应用程序)设置/重置的,而 GetOverlayInfo()
和IsMemberOf()
在资源管理器中运行(这是显而易见的)
我正在寻找使我的场景发挥作用的想法,即在以某种方式切换注册表项之后 GetOverlayInfo()
应至少调用一次。到目前为止我还没有找到任何可以在网络上进行的方法。
我尝试删除“Iconcache.db”文件,但这并没有强制资源管理器调用 GetOverlayInfo()
再次。
我们可以通过编程方式清除资源管理器的缓存吗?这可能会强制资源管理器调用 GetOverlayInfo()
再次?
编辑 1 -
我在某处读到,Windows Journal(WDJ)98期发表了一篇文章,标题为“重建互联网外壳图标缓存”。也许这篇文章会有帮助,但我在网上找不到它。有人有线索吗?
编辑 2- 这是示例代码。自从我回来S_FALSE
来自GetOverlayInfo()
方法,这意味着我们告诉资源管理器从现在开始在当前 session 中忽略此覆盖图标,因此资源管理器不会调用 IsMemberOf()
更远。现在,如果稍后注册表值被切换,那么我希望资源管理器调用 GetOverlayInfo()
再次。那可能吗 ?
STDMETHOD(IsMemberOf)(LPCWSTR path, DWORD attr)
{
......
......
// Check if icons are visible...
if(!s_bOverlay)
{
return S_FALSE;
}
return S_OK;
}
STDMETHOD(GetOverlayInfo)(LPWSTR pwszIconFile, int iLength, int* piIndex, DWORD* pdwFlags)
{
// Check if icons are visible...
if(!IsHandler(0))
{
return S_OK;
}
if(g_moduleName[0])
{
wcsncpy(pwszIconFile, g_moduleName, iLength - 1);
// Retrieve the icon index...
*piIndex = static_cast<T*>(this)->GetIconIndex();
*pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX;
return S_OK;
}
return E_FAIL;
}
bool IsHandler(const UINT uiState)
{
s_bOverlay = true; // static variable
if(ERROR_SUCCESS == reg.Open(HKEY_CURRENT_USER, L"SOFTWARE\\XYZ\\ABC", KEY_READ))
{
DWORD value = 1;
reg.QueryDWORDValue(L"PQR", value);
if(0 == value)
{
s_bOverlay = false;
}
}
return s_bOverlay;
}
最佳答案
对于那些关注此帖子的人。这是我在评论部分与 Raymond 进行的讨论的摘要。
在一个 session 中您只能调用一次 GetOverlayInfo() 方法。如果从中返回无效值,则 IsMemberOf() 方法甚至不会被调用。但如果您从 GetOverlayInfo() 返回有效值,则将调用 IsMemberOf()。 而且我们无法以编程方式重置 Icon 的缓存。
关于c++ - 我们可以强制 shell 扩展显式调用 IShellIconOverlayIdentifier::GetOverlayInfo 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19929278/
我有一个应用程序,我想在其中为特定文件和文件夹添加图标覆盖。 为此,我编写了一个 shell 扩展,它实现了 IShellIconOverlayIdentifier 接口(interface)。它是用
我们读取 GetOverlayInfo() 中的注册表项和IsMemberOf()方法来确定是否显示覆盖图标。从这两个方法中我们返回 S_FALSE如果未设置注册表项。 问题是当 GetOverlay
我是一名优秀的程序员,十分优秀!