私のアプリは、スリープ/休止モードをブロックする必要があります。コードを配置しましたが、WM_POWERBROADCASTメッセージを正常にキャッチした後、 PBT_APMQUERYSUSPENDもPBT_APMQUERYSTANDBYも正常にキャッチされません。興味深いことに、PBT_APMRESUMECRITICALおよびPBT_APMRESUMEAUTOMATICメッセージがアプリによってキャッチされています。
結論の質問: アプリがスタンバイ/サスペンド メッセージをキャッチできず、レジューム メッセージをキャッチすることに成功する理由はありますか?
この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);
}