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に変更する
- 「
- [スタートメニューを右クリック] > [ファイル名を指定して実行]
※グループポリシーやレジストリは、変更しないことをおすすめします。