您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页Windows系统的文件浏览器如何触发刷新

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);

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务