【问题标题】:Windows Message for User Locking Screen用户锁定屏幕的 Windows 消息
【发布时间】:2022-01-06 23:22:45
【问题描述】:

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

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

有人知道这是怎么做的吗?我需要通过 Windows XP 将它应用到 Windows 2000。

【问题讨论】:

  • WM_ENDSESSION lParam 包括ENDSESSION_LOGOFF 当它是注销而不是关闭时
  • @David:难以置信(沮丧)。感谢您发现这一点。现在我只需要弄清楚为什么我的应用程序没有对 WM_ENDESSION 做出反应,无论我做什么 - 就好像我的应用程序根本没有收到它一样。
  • 布伦特,只需调用 WTSRegisterSessionNotification 即可接收相关消息。
  • @Joe:如果 (1) 远程桌面 API 即使在不“使用”远程桌面时也适用,并且 (2) 如果有人会透露哪些头文件的秘密,我很乐意尝试必须包含才能访问 API(是吗?)

标签: c++ windows winapi message logout


【解决方案1】:

解决方案是将WM_WTSSESSION_CHANGE 发送至register 并在您的WndProc 中回复它。

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

要收到有关会话注销(而不是屏幕锁定)的通知,您应该能够使用WM_ENDSESSION 消息的lParam 值。寻找 ENDSESSION_LOGOFF 标志的存在。

【讨论】:

  • 当您说“注册”时,您是指像“RegisterWindowMessage()”http://msdn.microsoft.com/en-us/library/ms644947.aspx 这样的 API 调用吗?或者你只是说我应该将它添加到我的 WndProc 中?
  • @Brent 注意 register 是一个链接(到 WTSRegisterSessionNotification)。按照链接!我很确定你不能在 Win2k 上使用WM_WTSSESSION_CHANGE
猜你喜欢
  • 2011-01-27
  • 2015-11-26
  • 1970-01-01
  • 2022-01-07
  • 2012-09-27
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
相关资源
最近更新 更多