我正在使用自助服务终端风格的应用程序,我需要在按下电源按钮时控制PC的关闭/重启。多亏了这个post,我大约有90%的路在那里。
收到时发出完全未记录的内容:
[DllImport("user32.dll", SetLastError = true)]
static extern int CancelShutdown();
从WndProc返回并打开我自己的消息框,要求用户关机/重启或取消,并回复他们的行动。
如果我从任务栏进行启动/关闭,一切都很顺利(我可以尽快发出这些论文)。第一次按下电源按钮时,一切都运行良好。在接下来的电源按钮按下时,我会在收到WM_QUERYENDSESSION消息之前看到一分钟左右的延迟。
是否有关于Windows发布ACPI事件的频率的设置或注册表项?我知道这不是硬件,因为在linux下,同一台机器会像我按下按钮那样快速启动ACPI事件。
感谢。
答案 0 :(得分:1)
在工作中收到一些好处,我能够直接将此问题提交给Microsoft支持。在我的第三个支持工程师,我基本上被告知在应用程序级别是不可能的。他认为,调用无证件CancelShutdown()
"混淆"电源管理器或acpi驱动程序导致WM_QUERYENDSESSION
消息延迟。由于CancelShutdown()
没有记录,MS不愿意进一步调查。
那么,你怎么挂电源按钮?您需要编写设备驱动程序,特别是ACPI Filter Driver。我们现在正在研究这个问题。
答案 1 :(得分:0)
除非您与硬件制造商交谈或硬连接启动按钮,否则我认为不可能,因此它不会向处理此问题的硬件发送信号。 你只能推迟它,但即使这样我也不会给你100%的保证。
Windows 8.1(可能)会带来Kiosk模式。也许这就是你要找的东西; - )