2011-03-04 90 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