Windows系统的文件浏览器如何触发刷新

最近开发一个Drive程序,修改注册表添加System Folder Drive后需要通知已打开的每个文件浏览器刷新。最初选择获取对应窗体的句柄并发送WM_KEYDOWN、WM_KEYUP的VK_F5消息未果,使用spy++监控Class Name = CabinetWClass、Window Caption = Computer窗体由鼠标右键"刷新"后所产生的消息,最终由Window Caption = ShellView的窗体句柄处理。代码很简单但调用FindWindowEx较多,但这并不是最佳方案。在MSDN搜索相关问题发现老外推荐参考"Folder Options"的"Apply"按钮所产生的消息,它会立刻刷新相关已打开的文件浏览器,实际由:WM_COMMAND、wparam = 41504组成。于是代码简化如下:

void RefreshWindow(const TCHAR* lpClassName, const TCHAR* lpWindowName)
{
    auto hWnd = ::FindWindow(lpClassName, lpWindowName);

    while (hWnd != NULL)
    {
        ::PostMessage(hWnd, WM_COMMAND, 41504, 0);
        hWnd = FindWindowEx(NULL, hWnd, lpClassName, lpWindowName);
    }
}
RefreshWindow(_T("CabinetWClass"), _T("Computer"));

由于CabinetWClass是顶层窗体,完全可以选择发送一个窗口句柄等于HWND_BROADCAST的消息来通知所有顶层窗体达到相同的效果。

::PostMessage(HWND_BROADCAST, WM_COMMAND, 41504, NULL);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值