如何拦截 Windows 中物理电源按钮的按下?
Posted
技术标签:
【中文标题】如何拦截 Windows 中物理电源按钮的按下?【英文标题】:How can I intercept the push of the physical power button in Windows? 【发布时间】:2013-01-13 16:02:41 【问题描述】:有什么方法可以拦截按下物理电源按钮的事件以对此事件做出反应?即:
Push button -> My program catches the event -> My program performs action.
我的目标是编写一个 C# 程序/服务来监听电源按钮事件,然后打开“问我该怎么做”关机对话框(就像它在 Windows XP 时代所做的那样)。
【问题讨论】:
Detecting windows shutdown event 的可能重复项 @Jason:不是重复的。 OP 询问是否拦截按下电源按钮(以便它执行除关闭以外的其他操作),而另一个问题是关于检测系统正在关闭。 如果不是这两个的重复,那么你必须这样做:sevenforums.com/customization/… 我知道您可以将 CallNtPowerInformation 与 SystemPowerPolicyAc(和/或 Dc)一起使用来禁用电源按钮,使其不执行任何操作;为此,您需要将PowerButton.Action
设置为PowerActionNone
并将PowerButton.EventCode
设置为POWER_FORCE_TRIGGER_RESET
。相同的 API 提供了执行程序的选项,但我不清楚如何使用它。你也许可以通过实验来解决它,或者搜索关键字POWER_LEVEL_USER_NOTIFY_EXEC
可能会给你一些线索。
这是“问我该怎么做”对话框:link
【参考方案1】:
你可以使用 SystemEvents.SessionEnding Event
但是我不确定如果按下电源按钮这是否会起作用,当用户尝试注销或关闭系统时会发生此事件。
【讨论】:
【参考方案2】:我可以从理论上向您解释:该按钮(在大多数系统上与关机相关的按钮)在“电源选项”下有一个选项,您可以在其中指定按下电源按钮时要执行的操作。 ..
正是您正在寻找的那个 ACTION 事件被窗口绑定到按钮,然后实例化了关闭事件。有一些程序可以剖析和监视 Windows 变量和调用,您必须使用其中一个来找出并拦截/覆盖它。
【讨论】:
以上是关于如何拦截 Windows 中物理电源按钮的按下?的主要内容,如果未能解决你的问题,请参考以下文章