C++ 从Windows7中的安全屏幕(Ctrl+;Alt+;Del)返回时未收到WM#U PAINT消息

C++ 从Windows7中的安全屏幕(Ctrl+;Alt+;Del)返回时未收到WM#U PAINT消息,c++,mfc,windows-7,windows-messages,wm-paint,C++,Mfc,Windows 7,Windows Messages,Wm Paint,我需要检测安全屏幕的关闭,这是当用户在windows下按Ctrl+Alt+Del时显示的全屏。 在Xp中,当关闭此屏幕时,我的应用程序会收到wm_paint消息,但在windows 7下,并不总是收到消息,可能只有25%的时间收到消息 我尝试捕捉WM_WTSSESSION_CHANGE消息,但我只在用户注销然后重新登录到他们的帐户时收到此消息 不确定Vista中的行为,因为到目前为止我只在XP和7上测试过 您是否为窗口/会话调用了WTSRegisterSessionNotification(),

我需要检测安全屏幕的关闭,这是当用户在windows下按Ctrl+Alt+Del时显示的全屏。 在Xp中,当关闭此屏幕时,我的应用程序会收到wm_paint消息,但在windows 7下,并不总是收到消息,可能只有25%的时间收到消息

我尝试捕捉WM_WTSSESSION_CHANGE消息,但我只在用户注销然后重新登录到他们的帐户时收到此消息


不确定Vista中的行为,因为到目前为止我只在XP和7上测试过

您是否为窗口/会话调用了WTSRegisterSessionNotification(),以接收WM_Wtsession_更改的子类型(wParam)(WTS_控制台连接、WTS_控制台断开、WTS_会话锁定、WTS_会话解锁)?下面是一个简单的win32示例


似乎WTS_会话_解锁应该是您所追求的。

您是否为窗口/会话调用了WTSRegisterSessionNotification(),以接收WM_会话_更改(WTS_控制台连接、WTS_控制台断开、WTS_会话_锁定、WTS_会话_解锁)的子类型(wParam)?下面是一个简单的win32示例


似乎您要的应该是WTS_SESSION_UNLOCK。

我应该澄清一下,如果用户点击ctrl-alt-del,然后在弹出的安全屏幕上单击cancel,则不会收到WM_SESSION_CHANGE消息。如果我锁定然后解锁帐户,我将成功接收消息。我认为问题可能与Aero查看有关。如果用户点击“取消”,则会话实际上从未锁定,因此您不会收到WTS_session_UNLOCK消息是有道理的。除了在应用程序中进行简单的焦点跟踪之外,我不知道您如何处理“取消”场景。好的,这肯定是一个Aero问题。在这种情况下,很明显没有发送WM_uu消息,因为在aero下,窗口呈现方式不同。请看,我应该澄清,如果用户点击ctrl-alt-del,然后在弹出的安全屏幕上单击cancel,则不会收到WM_WTSSESSION_更改消息。如果我锁定然后解锁帐户,我将成功接收消息。我认为问题可能与Aero查看有关。如果用户点击“取消”,则会话实际上从未锁定,因此您不会收到WTS_session_UNLOCK消息是有道理的。除了在应用程序中进行简单的焦点跟踪之外,我不知道您如何处理“取消”场景。好的,这肯定是一个Aero问题。在这种情况下,很明显没有发送WM_uu消息,因为在aero下,窗口呈现方式不同。请看,您可能不会一直在7上收到WM_PAINT消息,因为DWM会缓存应用程序窗口的位图图像,即使它根本不可见。仅当窗口图像已更改或DWM已放弃其窗口图像副本时,它才会发送WM_PAINT。Vista在这方面的行为可能与7类似。您可能不会一直在7上收到WM_PAINT消息,因为DWM会缓存应用程序窗口的位图图像,即使它根本不可见。仅当窗口图像已更改或DWM已放弃其窗口图像副本时,它才会发送WM_PAINT。Vista在这方面的表现可能类似于7。