前回こんなアプリを作ったわけなんですが、
実際に使いたかったSurface Pro3でこのアプリを使ってディスプレイの電源を切ると、ディスプレイのみならず本体自体がスリープモードに入ってしまい、意味をなさないことが判明しました。
原因
これはWindowsの機能であるInstantGo(旧Connected Standby)によるもの。
ディスプレイを閉じた場合や電源ボタンを押して画面を消した状態でもWiFiの接続を維持し、メール等の受信をできるようにする機能なんですが、私の用途だと邪魔な機能。
InstantGoが有効かどうかはコマンドプロンプトで powercfg /a
を実行し、 スタンバイ(S0低電力アイドル)ネットワークに接続されています
と表示されていたら有効と判定できます。
対策
InstantGoは画面から無効化できないので、レジストリをいじる必要があります。
HKEY_LOCAL_MACHINES\SYSTEM\CurrentControlSet\Control\Power
配下に CsEnabled
という値があるので、これを1から0に値変更し、再起動することでInstantGoが無効化されます。
Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power
Entry: CsEnabled
Type: REG_DWORD
Data: 0 ( 無効)1 ( 有効)
なお、Surface Pro3をUSBリカバリメディアで初期化し、Windowsバージョンが1511の状態で上記レジストリをいじった後、1911にアップグレードした段階で設定がクリアされていたので、Windowsのアップグレードを行った場合はこの設定を再度行う必要がありそうです。
また、この設定をしたうえでディスプレイの電源を切り、タイマー等でディスプレイの電源をオンにした際、ロック画面が表示されることがありますが、こちらに関してはグループポリシーの コンピューターの構成 > 管理用テンプレート > コントロールパネル > 個人設定 > ロック画面を表示しない
を有効にするか、レジストリから HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization
のNoLockScreenの値を1に設定することでロック画面が無効化されます。
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization
Entry: NoLockScreen
Type: REG_DWORD
Data: 0 ( ロック画面有効)1 ( ロック画面無効)