Windows PC のディスプレイ電源をオフにする PowerShell スクリプト
Windows PC を使っていて、ディスプレイだけ電源オフにしたいことがあった。以下の記事にある PowerShell コードでできたので紹介。
こんな感じの PowerShell コードを作れば良い。
display-off.ps1
- Shift-JIS・CRLF で保存する
- dotfiles/display-off.ps1 at master · Neos21/dotfiles
# ====================================================================================================
# ディスプレイの電源をオフにする
#
# - 参考 : 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