ディスプレイの消灯時間を簡単に切り替えるDisplayonoff.batを作ってみた!

基本的に私の環境ではPCをつけっぱなしでディスプレイの消灯時間はなしで設定しているのですが、寝る時などは画面を消灯したいこともあるのでクリックで簡単に消灯時間を切り替えることができるDisplayonoff.batを作ってみました。これを使うと設定した2つの消灯時間を簡単に切り替えることができます。
理由の方は後で書きますが、私と同じような環境の人がいれば役に立つかもしれないと思い公開しました。簡単なバッチファイルなので、カスタマイズできる人は自分用にいじって設定してみてください。
これを作った理由

こんなものを作らずに物理ボタンでディスプレイを切ればいいと思うかもしれませんが、私の使っているDELL U2412Mはディスプレイのボタンを切ると、ディスプレイに接続しているUSBハブの電源も切れてしまうというクソ仕様なのです。ディスプレイを切ると同時に7インチのUSBモニタ UM-730の電源が切れてしまい、USBモニタの電源が切れるとディスプレイの設定が変わって表示していたウィンドウ類が別の場所に表示されるようになったり、色々と不都合なことが多いので仕方がなく今回のバッチファイルを作りました。これを押せば画面の消灯なしと1分後に消灯が簡単に切り替え出来るので便利な人にはすごく便利だと思います。

ちなみにこの設定を手動で変えようともうと「コントロールパネル」→「システムとセキュリティ」→「電源オプション」→「バランスの横にあるプラン設定の変更」から「ディスプレイの電源を切る」の設定を変更する必要があります。

Win10なら「システム」→「電源とスリープ」→「画面の設定」から変えることが出来ます。
ちなみにここまで移動して毎回変えるのは手間がかかりますし、とても面倒ですね。しかし、今回作ったbatファイルならワンクリックで設定した任意のディスプレイ消灯時間を切替可能です。正直こんなものを必要とする人は本当に数少ないと思いますが、中には必要になる人もいるかもと思って記事にしました。役に立てば幸いです。
Displayonoff.batの使い方!

Displayonoff.batをダウンロードします。または以下のDisplayonoff.batのコードの中身をテキストエディタにコピーして保存してください。
Displayonoff.batのダウンロードコードの中身
Displayonoff.batのコード中身は以下の通りです。必要最低限の重要な部分だけを説明すると「powercfg /x /monitor-timeout-ac 0」が電源の消灯時間の設定を変える部分です。最小限のbatファイルにするなら「powercfg /x /monitor-timeout-ac 0」と「powercfg /x /monitor-timeout-ac 1」と書かれた2つのファイルを用意すれば実現可能なのですが、それだとスマートではないので1つで実現させました。それ以外の部分は切り替えの消灯時間の保存と読み込みと設定ファイルの作成となります。プログラミングとかbatファイルの中身がわからなくても使えるようにしてあります。
@echo off
echo:
echo ================== Displayonoff.batの設定変更プログラム =====================
echo:
echo このプログラムはディスプレイの電源の設定を変更するためのプログラムです。
echo 起動すると[1]で設定した時間(分)、次に起動すると[2]で設定した時間(分)で
echo 液晶ディスプレイの電源がスタンバイになります。ディスプレイをオフにしない
echo ように設定したい場合は0に設定してください。
echo:
echo =============================================================================
echo:
IF NOT EXIST "setting.ini" (
goto start_setup
)
:monitor_timeout
for /f "tokens=1,2 usebackq delims==" %%a in (setting.ini) do (
if %%a == display_set1 set /a display_set1 =%%b
if %%a == display_set2 set /a display_set2 =%%b
)
set mode=%display_mode%
if "%display_set1%"=="" goto start_setup
if not "%display_set1%"=="" goto monitor_timeout
:start_setup
echo ■ ディスプレイの電源オフ時間(分)を設定できます。
set /p display_set1="電源オフ時間設定1(0-300):"
set /p display_set2="電源オフ時間設定2(0-300):"
set display_mode=1
echo:
echo [電源オフ時間設定1] = %display_set1%
echo [電源オフ時間設定2] = %display_set2%
:end_setup
IF EXIST "setting.ini" (
del setting.ini
)
echo display_set1=%display_set1% > setting.ini
echo display_set2=%display_set2% > setting.ini
setx display_mode %display_mode%
echo:
goto monitor_timeout
:monitor_timeout
if "%mode%"=="1" goto mode1
if "%mode%"=="2" goto mode2
:mode1
powercfg /x /monitor-timeout-ac %display_set1%
echo mode1 : display off time %display_set1%
setx display_mode 2
echo:
goto end
:mode2
powercfg /x /monitor-timeout-ac %display_set2%
echo mode1 : display off time %display_set2%
setx display_mode 1
echo:
goto end
:end
TIMEOUT /T 1 /NOBREAK
:monitor_timeout

Displayonoff.batを起動して、初期設定を行います。電源オフ時間設定1(0-300)を入力します。今回は1つ目は電源オフにしないように0を入力してEnterを押します。0にすると電源OFFになりません。

二つ目の電源オフ時間設定2(0-300)は1を入力してEnterを押します。ここに入力したX分後にディスプレイがオフになる設定になります。

しばらく待つと「成功:指定した値は保存されました」と表示されれば成功です。しばらくすると自動的にコマンドプロンプトが閉じます。同一フォルダ内にsetting.iniという設定を保存しているファイルが出来ているのでこれは削除しないでください。

これで初期設定は完了です。あとはDisplayonoff.batを起動する度に設定1と設定2が切り替わるようになります。設定の切り替えには環境によっては多少時間がかかることがあります。ウィンドウが自動的に閉じるまでそのまま待っていてください。
表示されているmode1 : display off time 1は切り替えた設定とディスプレイの消灯時間1分が表示されます。
再設定

ちなみに同一ファルダ内にできるsetting.iniは設定が保存されています。初期設定を再度行いたい場合はsetting.iniを削除してDisplayonoff.batを起動すれば、再び初期設定を行うことが出来ます。
今回の個人的感想
今回は珍しくプログラミング的な記事でした。今回の私が実現したいワンクリックで簡単に消灯時間を切り替えるソフトというのを探したのですが中々良いのが見つからなかったので、無いなら自分で作るかというわけでbatファイルで簡単に作ってみました。本音を言えばすぐに画面のオフ機能もつけたかったのですが、こればかりはどうやらbatファイルのコマンドではできない仕様らしく残念ながら諦めました。まあ、簡易的ではありますが、目的は実現できているので良しとしました。たまにはこういう記事も良いですよね。
設定の切り替え自体はワンクリックで切り替えられるのですが、たまにうまく切り替わらない時もあります。原因はよく分からないので謎です。適当に書いてるのでその辺りはご容赦ください。もし原因が分かる人が居たらコメントで教えてくれるとありがたいです。