用户锁屏的Windows消息

4

我正在使用C++进行老式的Windows编程,需要在我的WndProc中捕获一个事件,该事件指示用户已注销或锁定屏幕。

更新(感谢David Hefernan),我已经搜索了所有地方,但我找到的唯一一件事是WM_ENDSESSION消息-它不处理屏幕锁定事件。

有人知道如何做到这一点吗?我需要将其应用于Windows 2000到Windows XP版本。


当注销而不是关闭计算机时,WM_ENDSESSIONlParam参数包括ENDSESSION_LOGOFF - David Heffernan
@David:真不可思议(非常沮丧)。感谢你发现了这个问题。现在我只需要找出为什么我的应用程序无论我做什么都不会对 WM_ENDESSION 作出反应——就好像我的应用程序根本没有接收到它一样。 - Brent Arias
Brent,只需调用WTSRegisterSessionNotification即可接收相关消息。 - Joe Jordan
@Joe:如果(1)远程桌面API即使在不“使用”远程桌面时也适用,以及(2)如果有人能够提供必须包含的头文件的秘密以访问API,我很乐意尝试它(你知道吗?)。 - Brent Arias
1个回答

9
解决方案是注册WM_WTSSESSION_CHANGE并在您的WndProc中对其进行响应。
根据WM_WTSSESSION_CHANGE的文档,最低支持的操作系统是XP。现在,由于Windows 2000不再受支持,因此文档经常说XP是最小值,而实际上该功能在早期版本中可用。在这种情况下,快速搜索网络可能会让您失望。
要收到“会话注销”(而不是屏幕锁定)的通知,您应该能够使用WM_ENDSESSION消息的lParam值。查找ENDSESSION_LOGOFF标志的存在即可。

当你说“registering”时,你是指像“RegisterWindowMessage()”这样的API调用吗?http://msdn.microsoft.com/en-us/library/ms644947.aspx还是仅仅指我应该将它添加到我的WndProc中? - Brent Arias
1
@Brent 注意register是一个链接(指向WTSRegisterSessionNotification)。请点击链接!我很确定你不能在Win2k上使用WM_WTSSESSION_CHANGE - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接