Мое приложение должно блокировать спящий режим / режим гибернации. У меня есть код, но после успешного перехвата сообщения 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);
}