如何向所有的资源管理器窗口发送刷新消息

     原始问题是这样的:我想编程实现文件扩展名的显示与隐藏,实际上就是修改HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" 的HideFileExt的值,但问题是将此键值修改后,系统并不知道这个更新,我想应该是向系统广播某个消息(或者是某些消息)。我试着向windows发送各种各样的消息,包括试了BroadcastSystemMessage、SHChangeNotify、SystemParametersInfo等函数,但是都没有成功。

进一步一个折衷的问题是:我发现,在更改上面的注册表键值以后,在资源管理器窗口中按F5键刷新并起不到作用,只有点右键刷新才能使扩展名隐藏或显示。但是,如果已经在某个资源管理器窗口中点右键刷新了,则其它的资源管理器窗口可以通过F5键来得到隐藏或显示扩展名的目的。
     退一步,我应该如何向所有打开的资源管理器窗口都发送F5按键消息呢?我的思路是通过PostMessage(handle,WM_KEYDOWN,VK_F5,0);PostMessage(handle,WM_KEYUP,VK_F5,0);但是handle的确定相当困难,我试过用窗口的顶级handle及里面的FolderView的句柄,都不起作用。而且,我想,即使是找到用VK_F5遍历发送消息的方法,也会引起巨大的系统开销。而且,由于所有的资源管理器窗口都被遍历一遍(这是不是意味着所有的资源管理器窗口都会获得一次焦点?),如果遍历顺序控制不好的话会引起各窗口覆盖顺序的变化,肯定会让使用者感到不爽。
    问题大概就这么多,诸位有没有什么好的办法啊?请各路高手不吝赐教,多谢了先。

posted @ 2006-06-22 08:53  李现民  阅读(2268)  评论(2编辑  收藏  举报