我的应用程序需要阻止睡眠/休眠模式。我已经有相应的代码,但在成功捕获WM_POWERBROADCAST消息后,既无法成功捕获PBT_APMQUERYSUSPEND消息,也无法成功捕获PBT_APMQUERYSTANDBY消息。有趣的是,我的应用程序可以捕获PBT_APMRESUMECRITICAL和PBT_APMRESUMEAUTOMATIC消息。
最重要的问题是:是否有任何原因导致我的应用程序无法捕获待机/挂起消息,但成功捕获恢复消息?
这个Q&A [stackoverflow.com]对此有帮助,但是消息似乎没有传递到我的应用程序中。
我的代码(为简洁起见已删除事件记录代码):
最重要的问题是:是否有任何原因导致我的应用程序无法捕获待机/挂起消息,但成功捕获恢复消息?
这个Q&A [stackoverflow.com]对此有帮助,但是消息似乎没有传递到我的应用程序中。
我的代码(为简洁起见已删除事件记录代码):
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// Power status event triggered
if (m.Msg == (int)NativeMethods.WindowMessage.WM_POWERBROADCAST)
{
// Machine is trying to enter suspended state
if (m.WParam.ToInt32() == (int)NativeMethods.WindowMessage.PBT_APMQUERYSUSPEND ||
m.WParam.ToInt32() == (int)NativeMethods.WindowMessage.PBT_APMQUERYSTANDBY)
{
// Have perms to deny this message?
if((m.LParam.ToInt32() & 0x1) != 0)
{
// If so, deny broadcast message
m.Result = new IntPtr((int)NativeMethods.WindowMessage.BROADCAST_QUERY_DENY);
}
}
return; // ?!
}
base.WndProc(ref m);
}