Windowsの設定を変更せずに自動スリープを防ぐ方法

Windowsの設定を変更せずに自動スリープを防ぐ方法。

Windowsでは、セキュリティ対策や省電力を目的として、一定時間操作していない(アイドル状態)のときにスクリーンセーバーを実行させたり、スリープさせるといった設定ができますが、アイドル状態を検出する時間が短いと、ちょっと手を休めただけでスクリーンセーバーが実行され復帰する際はパスワードなどの認証が必要になり、煩わしさを感じるときがあります。

このような時、アイドル状態を検出する時間を変更するのが一般的ですが、企業などで管理されているパソコンでは、利用者によるWindowsの設定変更が制限されていることが多く、そのような場合に利用者ができる方法として、マウスカーソルを小刻みに動かし続けるデバイス(マウスジグラー)やソフトウェアを使ってアイドル状態を回避する方法があります。

そこでここでは、Windowsに標準搭載されているコマンド(PowerShellスクリプト、バッチファイル)を使って、マウスカーソルを小刻みに動かす方法を解説します。

PowerShellスクリプトの場合

マウスを小刻みに動かすPowerShellスクリプトを作成するときは、以下の内容をメモ帳に貼り付けて、分かりやすいファイル名(たとえばalways_active.ps1)で保存します。

Add-Type @"
    using System;
    using System.Runtime.InteropServices;

    public class JiggleMouse {
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, IntPtr dwExtraInfo);
        public const uint MOUSEEVENTF_MOVE = 0x0001;
    }
"@

$stoptimeSec = 5
write-host "Stop CTRL + C"

while ($true) {
    [JiggleMouse]::mouse_event(0x0001, 1, 0, 0, [IntPtr]::Zero)
    Start-Sleep -Milliseconds 100
    [JiggleMouse]::mouse_event(0x0001, -1, 0, 0, [IntPtr]::Zero)
    Start-Sleep -Seconds $stoptimeSec
}

あとは、作成したPowerShellスクリプトファイルを右クリックして「PowerShellで実行」を選択します。

Windowsの設定を変更せずに自動スリープを防ぐ方法。

スクリプト実行中はPowerShellのウィンドウが開いたままになりますが、最小化しておけば邪魔にはならないでしょう。終了するときは「Ctrl+C」を押します。

Windowsの設定を変更せずに自動スリープを防ぐ方法。

なお、WindowsのデフォルトではPS1ファイルの実行が制限されているため、事前に管理者としてターミナル(PowerShell)」を起動し、以下のコマンドを実行してPS1ファイルが実行できるようにしておきます。

PS> Set-ExecutionPolicy RemoteSigned

バッチファイルの場合

PS1ファイルは、事前に実行ポリシーを緩和する必要があり実行しやすいとは言えません。そこで、PowerShellを以下のようにバッチファイルから実行できるようにすれば、ダブルクリックで簡単に実行できるようになります。

以下の内容をメモ帳に貼り付けて、分かりやすいファイル名(たとえばalways_active.batなど)で保存します。

@echo off
powershell -NoProfile -ExecutionPolicy Bypass -Command "Invoke-Expression (Get-Content -Path '%~f0' | Select -Skip 3 | Out-String)"
goto :EOF
Add-Type @"
using System;
using System.Runtime.InteropServices;

public class JiggleMouse {
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, IntPtr dwExtraInfo);
public const uint MOUSEEVENTF_MOVE = 0x0001;
}
"@

$stoptimeSec = 5
write-host "Stop CTRL + C"

while ($true) {
[JiggleMouse]::mouse_event(0x0001, 1, 0, 0, [IntPtr]::Zero)
Start-Sleep -Milliseconds 100
[JiggleMouse]::mouse_event(0x0001, -1, 0, 0, [IntPtr]::Zero)
Start-Sleep -Seconds $stoptimeSec
}

実行中はコマンドプロンプトウィンドウが開いたままになりますが、最小化しておけば邪魔にはならないでしょう。終了するときは「Ctrl+C」を押します。

なお、PowerShellスクリプトもバッチファイルのどちらも管理者権限は不要です。

あとがき

会社でパソコンを使っているときに、頻繁にロックされたりスリープされて復帰のたびにパスワード認証を求められてイライラしているならおすすめです。また、TeamsやSlackなどでオンラインステータスが離席に替わってしまうのを防ぐ際にも有効です。