Windows PC のディスプレイ電源をオフにする PowerShell スクリプト

Windows PC を使っていて、ディスプレイだけ電源オフにしたいことがあった。以下の記事にある PowerShell コードでできたので紹介。

こんな感じの PowerShell コードを作れば良い。

# ====================================================================================================
# ディスプレイの電源をオフにする
# 
# - 参考 : https://qiita.com/sharow/items/ef78f2f5a8053f6a7a41
# - Esc キー等を押下するか、マウスを操作するなどすれば再度ディスプレイがオンになる
# ====================================================================================================

$code = @'
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool PostMessage(uint hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
'@;
$powerManager = Add-Type -MemberDefinition $code -Name 'PowerManager' -PassThru -Language CSharp;

# Display Off
$powerManager::PostMessage(0xffff, 0x0112, 0xf170, 2);

# Lock (Win + L 相当) : https://docs.microsoft.com/ja-jp/powershell/scripting/samples/changing-computer-state?view=powershell-7.2
# $powerManager::LockWorkStation();
# ↑ ロックもしたい場合はアンコメントする

過去に壁紙を変更する PowerShell を作った時と同じように、PowerShell スクリプトの中に C# のコードを埋め込んでいて、Add-Type で呼び出せるようにされている。

コメントアウトしてあるが、LockWorkStation() を呼び出せば Win + L と同じロック状態にできる。

後はこの .ps1 ファイルと同名の .vbs ファイル display-off.vbs を作り、以下の記事で紹介した VBScript を使ってやれば、PowerShell のウィンドウを開くことなく PowerShell が呼び出せるショートカットの出来上がり。

ショートカットを使う方法もあった。

デスクトップ PC の Galleria XG に、Dell S2721QS ディスプレイで試したところ、このスクリプトを実行すると Dell のディスプレイがスリープモードに移行した。ディスプレイ内蔵のスピーカーも電源 OFF になる。

復旧させる際は、マウスやキーボードをちょっと操作してやると勝手に画面が付く。マウスに少しでも触れるとディスプレイが ON に戻ってしまうので、マウスには触れないようにしておこう。w