Skip to content

Commit 639fee1

Browse files
committed
Handle WndProc power broadcast messages
1 parent 9286339 commit 639fee1

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/EventScheduler.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class EventScheduler
3737
public EventScheduler()
3838
{
3939
fullScreenChecker = new FullScreenApi(() => HandleTimerEvent(true));
40+
HiddenForm.OnPowerModeChanged = OnPowerModeChanged;
4041

4142
backgroundTimer.AutoReset = true;
4243
backgroundTimer.Interval = 60e3;
@@ -268,7 +269,7 @@ private void OnDisplaySettingsChanged(object sender, EventArgs e)
268269

269270
private void OnPowerModeChanged(object sender, PowerModeChangedEventArgs e)
270271
{
271-
if (e.Mode == PowerModes.Resume && (UpdateDisplayList() ||
272+
if ((e == null || e.Mode == PowerModes.Resume) && (UpdateDisplayList() ||
272273
(nextUpdateTime.HasValue && DateTime.Now >= nextUpdateTime.Value)))
273274
{
274275
LoggingHandler.LogMessage("Scheduler event triggered by resume from sleep");

src/HiddenForm.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ internal class HiddenForm : Form
1414
private const int ENDSESSION_CLOSEAPP = 0x1;
1515
private const int WM_QUERYENDSESSION = 0x11;
1616
private const int WM_ENDSESSION = 0x16;
17+
private const int WM_POWERBROADCAST = 0x0218;
18+
private const int PBT_APMRESUMESUSPEND = 0x0007;
19+
private const int PBT_APMRESUMEAUTOMATIC = 0x0012;
1720

21+
public static Microsoft.Win32.PowerModeChangedEventHandler OnPowerModeChanged;
22+
1823
[DllImport("user32.dll")]
1924
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hwndNewParent);
2025

@@ -59,6 +64,13 @@ protected override void WndProc(ref Message m)
5964
}
6065
m.Result = IntPtr.Zero;
6166
break;
67+
case WM_POWERBROADCAST:
68+
int pbt = m.WParam.ToInt32();
69+
if (pbt == PBT_APMRESUMEAUTOMATIC || pbt == PBT_APMRESUMESUSPEND)
70+
{
71+
OnPowerModeChanged(null, null);
72+
}
73+
break;
6274
}
6375

6476
base.WndProc(ref m);

0 commit comments

Comments
 (0)