Windows でスクリーンセーバーを防止・回避する
はじめに
Windows10 のスクリーンセーバー(またはロック画面)を「Windows の設定変更なし」「追加ソフトウェアなし」「マウス・キー入力への悪影響なし」で防止・回避します。具体的には、PowerShell+移動量0のマウス移動イベントで実現します。
※想定しきれていない悪影響がありましたら、ご連絡いただければ幸いです。
コード
AvoidScreenSaver.bat@powershell -NoProfile -ExecutionPolicy Unrestricted "&([ScriptBlock]::Create((cat \"%~f0\" | ?{$_.ReadCount -gt 1}) -join \"`n\"))" %* & goto:eof
# 上記の記述は、batコマンドです。                                               #
# ファイルの先頭行を無視してPowerShellで実行します。そして処理を終了します。    #
# AvoidScreenSaver.ps1 v2.2                                                     #
# 移動量0のマウス移動イベントを周期的に発火してスクリーンセーバーを防止する。   #
# see https://www.bugbugnow.net/2020/10/avoid-screen-saver.html                 #
# see https://gist.github.com/k08045kk/80e46994762ae66d3a7f1219716f3ef6         #
# クラスの定義                                                                  #
# see https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-mouse_event #
$Signature = @' 
  [DllImport("user32.dll")]
  public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
'@
$MouseEvent = Add-Type -MemberDefinition $Signature -Name "Win32MouseEvent" -Namespace Win32Functions -PassThru
echo "AvoidScreenSaver.ps1 started."
echo "[Ctrl+C] Press to exit."
while ($true) {
  # スリープ(50秒停止する)                                                    #
  Start-Sleep -s 50
  # 移動量0のマウス移動イベント(ロック画面・スクリーンセーバー・スリープ対策) #
  $MouseEvent::mouse_event(1, 0, 0, 0, 0)
}変更履歴
| 日付 | バージョン | 備考 | 
|---|---|---|
| 2020/10/03 | v1.0 | 初版 | 
| 2021/01/13 | v1.1 | UTF-8BOMなし対応(処理内の全角文字を半角文字に変更) | 
| 2021/02/05 | v2.0 | batファイル化 | 
| 2021/03/01 | v2.1 | batコマンドを2行から1行に変更 | 
| 2021/03/01 | v2.2 | Shift-JIS・LF改行対応(コメント行の末尾を半角文字に変更) | 
使い方(保存・起動・終了)
- 保存する
- 「ファイル名:
AvoidScreenSaver.bat」「文字コード:UTF-8」で保存する - コピー・ペーストできない環境では、最悪紙に印刷して、手入力してください
- 行頭が
#で始まる行は、コメント行であるため、入力は不要です - 手入力する場合、事前にPowerShellの動作確認することをおすすめします
- 環境によっては、PowerShellが動作しない可能性があります
 
 
 - 行頭が
 
 - 「ファイル名:
 - 起動する
コマンドプロントから「powershell -NoProfile -ExecutionPolicy Unrestricted .\AvoidScreenSaver.ps1」で実行する[保存したファイルを右クリック] > [PowerShellで実行] で実行するAvoidScreenSaver.batをダブルクリックする
 - 終了する
- 立ち上がった黒いウィンドウに対して [Ctrl+C] で終了する
 
 
※PowerShell は、Windows7 以降から標準搭載されています。
 PowerShell は、WindowsXP でも別途インストールすることで利用できます。
※PowerShell が無効化されている場合、本スクリプトは使用できません。
 セキュリティー的な理由で無効化されている可能性があります。
※自動起動することは可能ですが、ここでは取り扱いません。
 「スタートアップ」「タスクマネージャー」でググれば答えにたどり着けます。
※ウィンドウを非表示することは可能ですが、ここでは取り扱いません。
 「PowerShell ウィンドウ 非表示」あたりでググれば答えにたどり着けます。
別解
- Microsoft PowerToys の Awake 機能を使用する
- PowerToys を次の設定にする。
- [Awake を有効にする] を [オン] にする
 - [画面をオンにしたままにする] を [オン] にする
 
 - PowerToys は、 Microsoft Store から無償でダウンロードできます。
 
 - PowerToys を次の設定にする。
 - Windows Media Player をミュートで連続再生し続ける
- メディアプレーヤーは、再生中にスクリーンセーバーを表示しないオプションがデフォルトで設定されています。
 
 - Microsoft Power Point をスライドショーで表示し続ける
- [リボン] > [スライドショー] > [スライドショー設定]
- 種類の [出席者として参照する(ウィンドウ表示)] を設定する
 - フルスクリーンではなく、ウィンドウで表示できる
 
 
 - [リボン] > [スライドショー] > [スライドショー設定]
 - マウスを定期的に(左右に1ドット)移動させる
- マウスふるふる
 - 「マウスふるふる」の機能を実現するPowerShellスクリプトを作ってみる
 - 悪影響:作業中にマウスが勝手に動く(ふるふるする)
 
 - 「シフトキーやコントロールキーを定期的に押下する」スクリプトを使用する
- 例:VBSを利用した自動的にスクリーンセーバーが起動しない対応
 - 悪影響:押下中のシフトキーをキャンセルされることがある
- 例:[Shift+A] を押下し続けると、「AAA...」の入力が途中から「Aaa...」になる
 
 - 悪影響:ジョークプログラムとしてウイルス対策ソフトに検出されることがある
- 筆者環境で上記リンク先のVBSコードが Windows Defender に検出されました
- Joke:VBS/Trier.A
 
 
 - 筆者環境で上記リンク先のVBSコードが Windows Defender に検出されました
 
 - USBマウスムーバーを導入する
- 小型の USBデバイスでマウスとして OS に認識させ、マウス移動を定期的に発生させる
 - 利点:USB接続が可能であれば、 OS などの環境を問わず簡易に導入できる
 - 悪影響:(製品によるが)マウスふるふる同様、作業中にマウスが勝手に動く
 
 
備考(スクリーンセーバーを無効化する)
- スクリーンセーバー設定を変更する
- [スタートメニュー] > [設定] > [個人設定] > [ロック画面] > [スクリーンセーバー設定]
 - [デスクトップを右クリック] > [個人設定] > [ロック画面] > [スクリーンセーバー設定]
 - [タスクバーの検索窓] で「スクリーンセーバー設定」と入力する
- スクリーンセーバーの選択プルダウンを [なし] に設定する
 - [OK] 又は [適用] を選択する
 
 
 - ローカルグループポリシーを変更する
- [スタートメニューを右クリック] > [ファイル名を指定して実行]
- 「
gpedit.msc」を入力する - ローカルグループポリシーエディター
- [ローカルコンピューターポリシー] > [ユーザーの構成] > [管理用テンプレート] > [コントロールパネル] > [個人用設定] > [スクリーンセーバーを有効にする] を [無効] に設定する
 
 
 - 「
 
 - [スタートメニューを右クリック] > [ファイル名を指定して実行]
 - レジストリを設定する
- [スタートメニューを右クリック] > [ファイル名を指定して実行]
- 「
regedit」を入力する - レジストリーエディター
HKEY_CURRENT_USER\Control Panel\Desktop- 名前:ScreenSaveActive
 - 種類:REG_SZ
 - データ:0(無効)、1(有効)
 - 1→0に変更する
 
 
 - 「
 
 - [スタートメニューを右クリック] > [ファイル名を指定して実行]
 
※グループポリシーやレジストリは、変更しないことをおすすめします。