gpt4 book ai didi

c# - 如何控制电源键按下关机?

转载 作者:太空狗 更新时间:2023-10-29 20:36:46 29 4
gpt4 key购买 nike

我正在开发一个 kiosk 风格的应用程序,我需要在按下电源按钮时控制 PC 的关闭/重启。感谢这个post ,我已经完成了大约 90%。

  1. 在控制面板中将 acpi 电源按钮按下 Action 设置为关机。
  2. 监听 WndProc 消息 WM_QUERYENDSESSION
  3. 当收到问题时,完全没有记录:

    [DllImport("user32.dll", SetLastError = true)]
    static extern int CancelShutdown();
  4. 从 WndProc 返回并弹出我自己的消息框,要求用户关闭/重新启动或取消,并响应他们的操作。

如果我从任务栏开始/关闭,一切都会正常(我可以尽快发布论文)。第一次按下电源按钮时,一切也都运行良好。在随后按下电源按钮时,虽然我在收到 WM_QUERYENDSESSION 消息之前看到一分钟左右的延迟。

是否有关于 Windows 发出 ACPI 事件的频率的设置或注册表项?我知道这不是硬件问题,因为在 linux 下,同一台机器将以我按下按钮的最快速度触发 ACPI 事件。

谢谢。

最佳答案

在工作中寻求一些帮助,我能够将这个问题直接提交给 Microsoft 支持。在我的第三位支持工程师那里,我基本上被告知这在应用程序级别是不可能的。他认为调用未记录的 CancelShutdown() 会“混淆”电源管理器或 acpi 驱动程序,从而导致 WM_QUERYENDSESSION 消息延迟。由于 CancelShutdown() 未记录,MS 不愿意进一步调查。

那么,如何钩住电源按钮的按下?您需要编写一个设备驱动程序,特别是 ACPI Filter Driver .我们正在对此进行调查。

关于c# - 如何控制电源键按下关机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16179460/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com