2011-03-04 108 views
3

我正在用C++编写旧式Windows编程,并且需要捕获WndProc中的一个事件,该事件表示用户已注销或锁定屏幕。我已经到处搜索了,但唯一发现的是WM_ENDSESSION消息 - 它不处理屏幕锁定事件。我不知道该如何处理屏幕锁定事件。用户锁定屏幕的Windows消息

任何人都知道这是怎么做的?我需要通过Windows XP风格将它应用到Windows 2000。

+0

'WM_ENDSESSION' lParam包含'ENDSESSION_LOGOFF',当它是一个注销而不是关机时 – 2011-03-04 19:17:27

+0

@David:令人难以置信(令人沮丧)。谢谢你发现。现在我只需要弄清楚为什么我的应用程序不会对WM_ENDESSION做出反应,无论我做什么 - 就好像我的应用程序根本没有收到它。 – 2011-03-04 19:21:47

+0

布伦特,只需调用WTSRegisterSessionNotification来接收相关消息。 – 2011-03-04 19:24:43

回答

7

对于WM_WTSSESSION_CHANGE,解决方案是register,并在您的WndProc中对其进行响应。

根据WM_WTSSESSION_CHANGE的文档,支持的最低操作系统是XP。现在,由于Windows 2000不再受支持,文档经常说XP是最小的,实际上功能在早期版本中可用。在这种情况下,快速网络搜索表明您可能会感到失望。

被通知会话注销(而不是锁屏),你应该能够使用WM_ENDSESSION消息lParam值。查找ENDSESSION_LOGOFF标志的存在。

+0

当你说“注册”时,你的意思是像“RegisterWindowMessage()”这样的API调用:http:// msdn.microsoft.com/en-us/library/ms644947.aspx'?还是你的意思是我应该把它添加到我的WndProc? – 2011-03-04 19:31:28

+1

@Brent注意,注册是一个链接(到WTSRegisterSessionNotification)。按照链接!我很确定你不能在Win2k上使用'WM_WTSSESSION_CHANGE'。 – 2011-03-04 19:33:53

+0

@ulidtko感谢您的编辑 – 2013-06-25 12:13:13