删除自定义小图标时,刷新后资源管理器左侧没有看到效果,请前辈指点迷津

waltsin 2009-02-22 05:21:06
我在codeproject上看到一个程序,实现的是在文件或文件夹图标的右下角加一个自定义的小图标,我在这个的基础上进行了修改,让程序根据需要添加或删除右下角小图标,打开资源管理器后,添加图标,刷新,左右两侧都能看到已经添加了自定义的小图标,但是,删除的时候,虽然也刷新了,右侧文件夹上的小图标删除了,而左侧的却没有删除,按F5也不管用,除非关了资源管理器重新打开,才能看到自定义的小图标已经被删除了,我使用的是SHChangeNotify,参数SHCNE_UPDATEDIR,想请前辈指点一二,不胜感激。
...全文
414 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
waltsin 2009-02-24
  • 打赏
  • 举报
回复
jiangsheng:
非常感谢您的帮助,我试了一下,这种清空系统图标缓存的方法确实可行,只是有一点,我桌面上的图标也会重新排列,还有没有其他的方式可以实现呢?
waltsin 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 tianyu_lianxin 的回复:]
注销,重新登陆;或者重启,如果我没说错的话,这个程序改的肯定是注册表。
[/Quote]
这位仁兄见识果然非凡,多谢关注
蒋晟 2009-02-23
  • 打赏
  • 举报
回复
You can force Windows to erase and reload all system icons by temporarily changing the icon size used by the system, and then changing it back to its original value. After each change, use the SendMessageTimeout API function to tell all running applications there has been a change in the system's metrics.
http://msdn.microsoft.com/en-us/library/aa155700(office.10).aspx
Chivalry 2009-02-23
  • 打赏
  • 举报
回复
关注
waltsin 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lwx300 的回复:]
三问文件夹选项更改后刷新的问题
http://topic.csdn.net/u/20081121/11/f5034a2f-26ae-4f74-a357-1fbd33576883.html

//试试这样行不行。
::SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)TEXT("ShellState"), SMTO_ABORTIFHUNG, 3000, NULL);
::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);

[/Quote]
谢谢关注,还是没有效果
lwx300 2009-02-23
  • 打赏
  • 举报
回复
三问文件夹选项更改后刷新的问题
http://topic.csdn.net/u/20081121/11/f5034a2f-26ae-4f74-a357-1fbd33576883.html

//试试这样行不行。
::SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)TEXT("ShellState"), SMTO_ABORTIFHUNG, 3000, NULL);
::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
waltsin 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lwx300 的回复:]
使用右键菜单中的“刷新”(不是用 F5)行吗?

[/Quote]
可以告诉我在资源管理器的左侧怎么“使用右键菜单中的‘刷新’(不是用 F5)”吗?
还是在右侧使用“刷新”菜单啊?在右侧使用“刷新”菜单不起作用,包括最小化、最大化后都不起作用,除非关了重新打开。
waltsin 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jiangsheng 的回复:]
You can force Windows to erase and reload all system icons by temporarily changing the icon size used by the system, and then changing it back to its original value. After each change, use the SendMessageTimeout API function to tell all running applications there has been a change in the system's metrics.
http://msdn.microsoft.com/en-us/library/aa155700(office.10).aspx
[/Quote]
Try first,thank you very much.
lwx300 2009-02-23
  • 打赏
  • 举报
回复
使用右键菜单中的“刷新”(不是用 F5)行吗?
tianyu_lianxin 2009-02-23
  • 打赏
  • 举报
回复
注销,重新登陆;或者重启,如果我没说错的话,这个程序改的肯定是注册表。
waltsin 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhoujianhei 的回复:]
SHCNF_PATH
强。


[/Quote]
这个也试过了
waltsin 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 oyljerry 的回复:]
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,NULL,NULL); //1
SHChangeNotify(SHCNE_UPDATEIMAGE,SHCNF_DWORD,NULL,NULL); //2
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, pathname, NULL); //3

//在资源管理器中使用命令时
//1 2组合,刷新右侧
//2 3组合,刷新左侧
//1 3组合,两侧都刷新
[/Quote]
谢谢关注,这位仁兄的回复我感觉很眼熟,呵呵
zhoujianhei 2009-02-22
  • 打赏
  • 举报
回复
SHCNF_PATH
强。

oyljerry 2009-02-22
  • 打赏
  • 举报
回复
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,NULL,NULL); //1
SHChangeNotify(SHCNE_UPDATEIMAGE,SHCNF_DWORD,NULL,NULL); //2
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, pathname, NULL); //3

//在资源管理器中使用命令时
//1 2组合,刷新右侧
//2 3组合,刷新左侧
//1 3组合,两侧都刷新
waltsin 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
参数用SHCNE_UPDATEIMAGE试试。
[/Quote]
谢谢关注,你说的我试过,那个参数不管用
waltsin 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhoujianhei 的回复:]
wEventId
都试试。


[/Quote]
可以说详细点吗?小弟才疏学浅,不明白wEventId是什么意思。
多谢关注
cnzdgs 2009-02-22
  • 打赏
  • 举报
回复
参数用SHCNE_UPDATEIMAGE试试。
zhoujianhei 2009-02-22
  • 打赏
  • 举报
回复
wEventId
都试试。

waltsin 2009-02-22
  • 打赏
  • 举报
回复
一共两个dll,一个是加载自定义图标的,如下是添加图标的判断条件:
STDMETHODIMP IsMemberOf(LPCWSTR pwszPath, DWORD dwAttrib)
{
wchar_t *s = _wcsdup(pwszPath);
HRESULT r = S_FALSE;
_wcslwr(s);
// Criteria
这里是判断条件,条件成立设置r = S_OK;
free(s);
return r;
}

另一个dll用于添加右键菜单,一个是“添加自定义图标”,另一个是“删除自定义图标”,选择“添加自定义图标”时,使上面的条件成立,调用SHChangeNotify进行刷新;选择“删除自定义图标”时,使上面的条件不成立,调用SHChangeNotify进行刷新
waltsin 2009-02-22
  • 打赏
  • 举报
回复
一共两个dll,一个是加载自定义图标的,如下是添加图标的判断条件:
STDMETHODIMP IsMemberOf(LPCWSTR pwszPath, DWORD dwAttrib)
{
wchar_t *s = _wcsdup(pwszPath);
HRESULT r = S_FALSE;
_wcslwr(s);
// Criteria
这里是判断条件,条件成立设置r = S_OK;
free(s);
return r;
}

另一个dll用于添加右键菜单,一个是“添加自定义图标”,另一个是“删除自定义图标”,选择“添加自定义图标”时,使上面的条件成立,选择“删除自定义图标”时,使上面的条件不成立,然后调用SHChangeNotify进行刷新
加载更多回复(1)

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧