🐼

WinUI3でSystemEvents (PowerModeChangedとか)

2024/04/22に公開

はじめに

WinUI3に挑戦してて、スリープからの復帰検知したくてSystemEvents.PowerModeChanged使おうとしたけど、結構詰まったので備忘録

内容

  1. SystemEventsのインストール
    Nugetからインストール (ここ)
    ないとそもそもビルドできない。

  2. イベント登録
    イベント登録は専用のスレッド(InvokeOnEventsThread)からする。
    でないと呼ばれない。
    確認していないけど登録解除もおそらく同じ。
Microsoft.Win32.SystemEvents.InvokeOnEventsThread(() =>
{
    Microsoft.Win32.SystemEvents.PowerModeChanged += (s, e) => logger.Debug($"OnPowerModeChanged:{e.Mode}");
    Microsoft.Win32.SystemEvents.SessionSwitch += (s, e) => logger.Debug("OnSessionSwitch");
    Microsoft.Win32.SystemEvents.SessionEnding += (s, e) => logger.Debug("OnSessionEnding");
    Microsoft.Win32.SystemEvents.SessionEnded += (s, e) => logger.Debug("OnSessionEnded");
    Microsoft.Win32.SystemEvents.EventsThreadShutdown += (s, e) => logger.Debug("OnEventsThreadShutdown");
});

参考

https://github.com/microsoft/WindowsAppSDK/issues/3158#issuecomment-2016410030

Discussion