我的一个 Delphi XE2 程序在运行和空闲时“防止 Windows 关机”。我的大多数应用程序都不是这种情况,我需要解决它。在 XP 上,Windows 静默无法关闭;在 Win7 上,对话框显示我的应用程序阻止关机。
与这里的类似问题不同,该程序是单线程的,我没有使用托盘,并且我暂时断开了主窗体和具有它们的一个子窗体中的 OnCloseQuery 和 FormClose 事件。在正常使用中,程序会干净地关闭,并且不会在 Process Explorer 中留下任何痕迹。
我已经通过实验添加了 WM_QueryEndSession 和 WM_EndSession 处理程序,它们将日志消息写入 Windows 事件日志。在测试 Windows 关闭时,只有前者会触发,Wparam 和 Lparam 都为零。
对于可能导致此问题的原因或如何进一步调查的任何想法,我将不胜感激。我不愿意在不知道发生了什么的情况下尝试在 WM_QueryEndSession 上调用 Halt。