我的应用需要阻止睡眠/休眠模式。我有代码,但在成功捕获WM_POWERBROADCAST消息后,PBT_APMQUERYSUSPEND和PBT_APMQUERYSTANDBY都没有被成功捕获。有趣的是,我的应用程序正在捕获PBT_APMRESUMECRITICAL和PBT_APMRESUMEAUTOMATIC消息。
底线问题:我的应用程序是否有任何原因无法捕获待机/挂起消息,但成功捕获了恢复消息?
顺便说一句,这个问答[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);
}