SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【Windows】スクリーンセーバーが起動しないようにする

問題

スクリーンセーバーが5分で起動するので解除がちょっと面倒です。

スクリーンセーバーの発動を自動的に阻止することはできませんか。

答え

マウスイベントを4分ごとに発生させてスクリーンセーバーの実行を防ぐ例

以下を avoid-screensaver.bat などの名前でバッチファイルとして保存して、実行する。

@powershell -NoProfile -ExecutionPolicy Unrestricted "&([ScriptBlock]::Create((cat \"%~f0\" | ?{$_.ReadCount -gt 1}) -join \"`n\"))" %* & goto:eof

$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 "avoid screensaver started."
echo "Press [Ctrl+C] to exit."
while ($true) {
  Start-Sleep -s 240
  $MouseEvent::mouse_event(1, 0, 0, 0, 0)
}

黒い窓は出る(コマンドプロンプト)

終了するときは CTRL+C

スクリーンセーバー防止起動中

最初からPwerShellで実行できるとよいが、拡張子を .ps1 にしてもダブルクリックで起動しないので、.bat にしてバッチファイルとして起動してPowerShellとして実行している。

PowerShell部分(2行目以降)を .ps1 で保存して、呼び出すショートカットを作ってもよい。リンク先を以下のようにするとショートカットダブルクリックで実行できる。

powershell -NoProfile -ExecutionPolicy RemoteSigned -File [PowerShellスクリプトのフルパス]

関連するメモ

コメント