Mon application doit bloquer le mode veille/hibernation. J'ai le code en place, mais après avoir attrapé avec succès le message WM_POWERBROADCAST, ni PBT_APMQUERYSUSPEND ni PBT_APMQUERYSTANDBY sont capturés avec succès. Fait intéressant, le PBT_APMRESUMECRITICAL et PBT_APMRESUMEAUTOMATIC messages sont être pris par mon application. Question de ligne directrice: y a-t-il une raison pour laquelle mon application ne parviendrait pas à intercepter les messages de mise en attente/de suspension, mais parviendrait à attraper les messages de reprise?Impossible d'intercepter les messages de veille/suspension (winXP)
Cette Q&A [stackoverflow.com] a aidé, mais encore une fois, les messages ne semblent pas être à mon application.
Mon code (w/événement code de l'enregistrement supprimé par souci de concision):
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);
}
qu'en est-il de WPF? – Alessio