+ #region Power state change window messages
+ private const int WM_POWERBROADCAST = 0x0218;
+ private const int WM_SYSCOMMAND = 0x0112;
+
+ private const int PBT_APMSUSPEND = 0x0004;
+ private const int PBT_APMRESUMESUSPEND = 0x0007;
+ private const int PBT_APMRESUMECRITICAL = 0x0006;
+ private const int PBT_APMRESUMEAUTOMATIC = 0x0012;
+ private const int PBT_POWERSETTINGCHANGE = 0x8013;
+
+ private static Guid GUID_SYSTEM_AWAYMODE = new Guid("98a7f580-01f7-48aa-9c0f-44352c29e5c0");
+
+ private const int SC_SCREENSAVE = 0xF140;
+ private const int SPI_GETSCREENSAVERRUNNING = 0x0072;
+
+ [DllImport("user32.dll", SetLastError = true)]
+ static extern bool SystemParametersInfo(int action, int param, ref int retval, int updini);
+
+ [StructLayout(LayoutKind.Sequential, Pack = 4)]
+ internal struct POWERBROADCAST_SETTING
+ {
+ public Guid PowerSetting;
+ public uint DataLength;
+ public byte Data;
+ }
+ #endregion
+
+ /// <summary>
+ /// Check for power state changes, and pass up when it's something we don't care about
+ /// </summary>
+ /// <param name="msg">The incoming window message</param>
+ protected override void WndProc(ref Message msg)