挂钩到Win32 API事件以在Desktop完全加载时收到通知

时间:2014-11-04 19:47:50

标签: windows winapi events dwm

想象一下用户登录并且没有将交换机注销到另一个用户的情况。然后切换回来。当切换回来时(因为我们从未退出),Windows将首先显示黑色桌面,然后进行一些窗口闪烁(尤其是2个显示器),然后最终将所有内容重新安排到我们中断的状态。那种闪烁和重新安排需要一些时间(大约1秒钟)。

获取有关桌面完全加载的通知的最有效方法是什么?我需要这个,因为我想在桌面满载时调用我的特定功能。

一个选项是挂钩到WM_PAINT,但是我使用了Spy ++,我在桌面上收到了12个WM_PAINT个事件,因此不可靠。有人知道另一种方式吗?

1 个答案:

答案 0 :(得分:2)

找到了一个更简单,更简单的解决方案。对DwmFlush()的调用。该功能是Windows DWM API的一部分。

以下是我测试的示例代码,它实际上适用于Windows 8.1中的快速用户切换:

while (true)
{
    HRESULT hr = DwmFlush();

    if (hr == S_OK)
    {
        std::cout << "TRUE" << std::endl;
    }
    else
    {
        std::cout << "FALSE" << std::endl;
    }

    Sleep(1000);

}