モニターを点灯・消灯する Powershell スクリプト

夜間に長い作業を裏で行っているあいだ、眩しく光るモニターを消灯できないかと考えた。 コマンドではないが、 PostMessage を使えばできるようだ。

Powershell を使ってそれをする関数を書いてみた。 Windows 10 および Windows 11 で検証した。

使い方はこんな感じ。 モニターを消しても、マウスやキーボードを動かすと点灯する。

ちなみに、 LowPower というパラメーターがあるけど、実行しても何も起きなくてよくわかってない。

Set-MonitorState -TurnMonitor Off
function Set-MonitorState {
    param (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [ValidateSet("On", "Off", "LowPower")]
        [string]$TurnMonitor
    )

    $signature = @'
[DllImport("user32.dll")]
public static extern bool PostMessage(
    uint hWnd, uint Msg, IntPtr wParam, IntPtr lParam
);
'@
    Add-Type -Namespace MyNameSpace -Name Utils -MemberDefinition $signature -ErrorAction SilentlyContinue

    $CONST = @{
        HWND_BROADCAST  = 0xFFFF
        WM_SYSCOMMAND   = 0x0112
        SC_MONITORPOWER = 0xF170
    }

    $lParam = switch ($TurnMonitor) {
        "On" { -1 }
        "LowPower" { 1 }
        "Off" { 2 }
    }
    [MyNameSpace.Utils]::PostMessage(
        $CONST.HWND_BROADCAST, $CONST.WM_SYSCOMMAND, $CONST.SC_MONITORPOWER, $lParam) `
    | Out-Null
}