如何检测用户按 Power 关机?

fox1999 2010-03-15 11:55:01
如何检测用户按 Power 关机?


我的程序在运行,这时,用户关机了,我需要检测用户是正常的方式关闭系统,还是直接按"Power"键或按主机上的 Power 来关机。
...全文
175 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
WizardK 2010-03-15
  • 打赏
  • 举报
回复
WM_QUERYENDSESSION消息

The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls the ExitWindows function. If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.

After processing this message, the system sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message.
fox1999 2010-03-15
  • 打赏
  • 举报
回复
主机上的Power长按后是强制关机
-------------
但不长按,效果与按 Power 键是一样的。
jackson35296 2010-03-15
  • 打赏
  • 举报
回复
你说的是键盘上的Power还是主机上的Power?主机上的Power长按后是强制关机,由Bios执行,windows应该没法获取到。键盘上的Power应该可以hook到吧。
bilaopao 2010-03-15
  • 打赏
  • 举报
回复
恩,我不了解,帮你顶顶吧。

[Quote=引用 8 楼 fox1999 的回复:]
Power跟直接拔掉电源有什么区别?
-------------
按 Power 时,系统会出现,正在关闭 Windows .... 然后关机。

但按 Power 关机的速度,比 开始 -> 关闭系统 要快很多。
[/Quote]
fox1999 2010-03-15
  • 打赏
  • 举报
回复
Power跟直接拔掉电源有什么区别?
-------------
按 Power 时,系统会出现,正在关闭 Windows .... 然后关机。

但按 Power 关机的速度,比 开始 -> 关闭系统 要快很多。
bilaopao 2010-03-15
  • 打赏
  • 举报
回复
Power跟直接拔掉电源有什么区别?
fox1999 2010-03-15
  • 打赏
  • 举报
回复
正常关机时,应该能收到一个WM_QUERYENDSESSION消息

--------------------
按 Power 关机时,也能收到。 WM_ENDSESSION 也不能区别是正常关机还是按 Power 关机。
fox1999 2010-03-15
  • 打赏
  • 举报
回复
全局hook power按键
--------------
没用的, 别人按主机 Power
fox1999 2010-03-15
  • 打赏
  • 举报
回复
我拔掉电源你能检测出来吗?
-------------
这个不在讨论之列
bilaopao 2010-03-15
  • 打赏
  • 举报
回复
我拔掉电源你能检测出来吗?
StarsunYzL 2010-03-15
  • 打赏
  • 举报
回复
正常关机时,应该能收到一个WM_QUERYENDSESSION消息
Eleven 2010-03-15
  • 打赏
  • 举报
回复
全局hook power按键
zhouzhipen 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 starsunyzl 的回复:]
引用 6 楼 fox1999 的回复:
正常关机时,应该能收到一个WM_QUERYENDSESSION消息

--------------------
按 Power 关机时,也能收到。 WM_ENDSESSION 也不能区别是正常关机还是按 Power 关机。


你要实现什么功能呢?既然按键盘上的 Power 键关机也能收到WM_QUERYENDSESSION的话,那你的程序就可……
[/Quote]

也正是我要说的
StarsunYzL 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fox1999 的回复:]
正常关机时,应该能收到一个WM_QUERYENDSESSION消息

--------------------
按 Power 关机时,也能收到。 WM_ENDSESSION 也不能区别是正常关机还是按 Power 关机。
[/Quote]

你要实现什么功能呢?既然按键盘上的 Power 键关机也能收到WM_QUERYENDSESSION的话,那你的程序就可以实现关机前的一些处理,比如保存数据,这样不就可以认为是正常关机了吗?
mszjk 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jackson35296 的回复:]
你说的是键盘上的Power还是主机上的Power?主机上的Power长按后是强制关机,由Bios执行,windows应该没法获取到。键盘上的Power应该可以hook到吧。
[/Quote]
可以获取到,但不一定能修改.
mszjk 2010-03-15
  • 打赏
  • 举报
回复
是不是会有个中断?
fox1999 2010-03-15
  • 打赏
  • 举报
回复
WM_QUERYENDSESSION

只是系统关闭时会消息应用程序。

但应用程序不知道这时是用户正常关机(从开始菜单)还是“非正常关机”(按键盘 Power 与 主机 Power)

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧