0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UDHI-LAB++;Advent Calendar 2024

Day 7

ワンクリックでモニターの電源を落としたい話

Last updated at Posted at 2024-12-06

はじめに

寝るときはPCをシャットダウンさせて寝る人もいればスリープにして寝る人もいます。
では何か処理を待って寝るときはどうしたらよいでしょうか

もちろんシャットダウンなんかしたら処理は止まりますし、スリープにさせても同様です。
じゃあそのままモニターが煌々ときらめく中眠りにつけるかと言われるとまあ無理でしょう

windows君は優しいので操作が無かった場合は自動でモニターの電源を消してくれる機能がありますが些か精度が悪く、短い時間に設定するとちょっとした時間でもすぐに消えて不便です

物理的にモニターの電源を切るにしても2枚以上あると不便です

要は自分のタイミングで簡単に画面だけオフにしたいよねっていう話

結論

以下のコードを
新規作成→ショートカット→ショートカットの項目の場所に登録するだけ

powershell -Command &{sleep 2;sal o New-Object;$f='System.Windows.Forms';Add-Type -AssemblyName $f;$m=(o \"$f.Message\")::Create((o \"$f.Form\").Handle,274,61808,2);(o \"$f.NativeWindow\").DefWndProc([ref]$m);}

解説

powershell -Command &{ #powershellをショートカットから呼び出してコマンドを実行
sleep 2;    #2秒待つ(クリックした瞬間に画面が消えるのは困る)
sal o New-Object;    #`New-Object`にエイリアス`O`を設定
$f='System.Windows.Forms';    #windowsフォームを操作するための名前空間`System.Windows.Forms`を指定する
Add-Type -AssemblyName $f;    #指定した名前空間をスクリプトに取り込んで使用可能にする。
$m=(o "$f.Message")::Create((o "$f.Form").Handle,274,61808,2);    #windowsのメッセージを作成(後述)
(o "$f.NativeWindow").DefWndProc([ref]$m);    #`DefWndProc`メソッドを使ってシステムに送信
}

windowsにおけるウィンドウメッセージとは

簡単に説明するとwindowsとアプリケーションの通信を行う仕組みのこと
例えば、

  • キーボード入力
  • マウス操作
  • レンダリング要求
    などに対して動作するアプリケーションを構築できる

主なウィンドウメッセージ

ここに書く意味もあまりないと思うのですが申し訳程度に書いておきます
もっと詳しく知りたい方はこちらをどうぞ

メッセージコード 内容
WM_CREATE ウィンドウが作成されたとき
WM_DESTROY ウィンドウが閉じられるとき
WM_PAINT ウィンドウが再描画されるとき
WM_KEYDOWN キーボードのキーが押されたとき
WM_LBUTTONDOWN マウスの左ボタンが押されたとき
WM_SYSCOMMAND システムコマンド(Ex.ウィンドウの閉じるボタン等)

今回使用した値は以下の通り。

  • 274 (0x112) : WM_SYSCOMMAND (システムコマンドを送信)
  • 61808 (0xF170) : SC_MONITORPOWER (モニターの電源操作)
  • 2 : SC_MONITORPOWERのパラメーター
    • -1 : ディスプレイの電源をON
    • 1 : ディスプレイを低電力状態に
    • 2 : ディスプレイをOFF

最後に

アドカレ公開が予定より3時間遅れてしまいましたが許してください...
ちなみにshellスクリプトを組んだのはこれが初めてです(たぶん)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?