読者です 読者をやめる 読者になる 読者になる
MENU

PCディスプレイの明るさをキーボードから操作する

電子機器のこと プログラミング PC・スマホ・タブレット

PCディスプレイの明るさを頻繁に変える必要が出てきたので、ScreenBrightというアプリを使ってワンクリックで変更できるようにした。

hiki-jiritsu.hatenablog.com

でも天候によって部屋の明るさは変わるし、日没の時間も変わっていくし、時間帯で明るさを決めると意外に不便なことが分かった。

そこで、日没の時間に合わせて色温度を変えてくれる「f.lux」というアプリを試してみた。

justgetflux.com

でも明るさは変えられないので、まぶしくないようにコントロールすると、どぎついオレンジ色になってしまう。あきらめて別の手段を探した。

調べているうちに、SreenBrightが実はコマンドラインに対応していて、工夫次第でキーボードから明るさを変更できることが分かった。

www.overclock.net

上記リンク先を、私めなりに参考にさせていただいた。

必要なファイル

まずはScreenBrightを入手(ディスプレイが「DDC/CI」という規格に対応している必要がある)。

www.softpedia.com

次に下記の4つのファイルを用意する(あらかじめ拡張子を表示しておく)。

current.txt
現在の明るさを記録する。初期値は適当でいい。

ChangeBringhtness.bat
ScreenBrightを操作して変更後の明るさを保存する。

RunChangeBrightness.vbs
ChangeBringhtness.batを起動する。

各ファイルの中身は以下の通り。

current.txt

100

ChangeBringhtness.bat

@ECHO OFF

rem 指定したい明るさの値(0~100)
set LOW=10
set MIDDLE=50
set HIGH=90

rem 変更前の明るさを読み込む
for /f %%i in (current.txt) do (
	set OLD_BRIGHTNESS=%%i
	goto BREAK
)

exit

:BREAK

if %OLD_BRIGHTNESS%==%HIGH% goto SET_LOW
if %OLD_BRIGHTNESS%==%MIDDLE% goto SET_HIGH
GOTO SET_MIDDLE

:SET_LOW rem 明るさを最小にする場合
set NEW_BRIGHTNESS=%LOW%
set BLUE=60 rem 青の値(0~100)
GOTO SET

:SET_MIDDLE rem 明るさを中間にする場合
set NEW_BRIGHTNESS=%MIDDLE%
set BLUE=70
GOTO SET

:SET_HIGH rem 明るさを最大にする場合
set NEW_BRIGHTNESS=%HIGH%
set BLUE=80
GOTO SET

:SET
rem 明るさと色味を変更
"ScreenBright" -set brightness %NEW_BRIGHTNESS% blue %BLUE% save

rem 変更後の明るさを保存
type nul > current.txt
echo %NEW_BRIGHTNESS% >> current.txt

exit

RunChangeBrightness.vbs

Option Explicit '変数を宣言しないと使えないように

Dim shell

Set shell = CreateObject("WScript.Shell" )

'batファイルを起動
shell.Run "ChangeBrightness.bat", 0

Set shell = Nothing

これらのファイルをScreenBright.exeと同じフォルダに入れて、RunChangeBrightness.vbsをダブルクリックすれば明るさが変わるはず。

キーボードから操作する

長年Windowsを使ってきたが、ショートカットをショートカットキーから開けることを初めて知った。これでキーボードから明るさを変えられる。

www.lifehacker.jp

RunChangeBrightness.vbsのショートカットを作成。プロパティを開いて任意のショートカットキーを設定。

f:id:h_imwikr:20160919122746p:plain

ショートカットキーから起動するには、設定したショートカットをスタートメニューの階層に入れる必要がある。ボキは下記の場所に配置した。

 C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

あとはPCを再起動すればOK。これで明るさを瞬時に切り替えられるようになった。

Windows10の不具合

切り替えられるようになったはずだった。たしかに切り替えられたが、しばらくすると、キーを押してから変更されるまで数秒待たされるようになってしまう。再起動するまで治らない。調べてみると、どうやらWindows10の不具合らしい。

answers.microsoft.com

対策の詳細は上記リンク先を参考にしていただくとして、取り急ぎ操作だけを抜粋して書くと、「問題が発生したらWindowsの「設定」を開いて×ボタンで閉じる」。

意味が分からない。でも確かに、それ以降は問題が発生しなくなった。それでも朝起きたときのように時間が開くと発生してしまう。やっぱりだめだ。僕の環境ではほとんど効果なし。

SetPoint

ロジクールのキーボードを使っているなら、「SetPoint」を使ってホットキーに割り当てるという選択肢もある。これなら上記不具合が発生しても影響されない。

SetPoint - Logicoolサポート

「ホットキーの設定」から実行したいプログラムを選択できる。

f:id:h_imwikr:20160919122804p:plain

*vbsファイルを選択するには参照画面で、対象を「すべてのファイル」に切り替える必要がある。

補足

明るさと同時に色味も変える

ScreenBrightは明るさ以外にも、コントラストと色味(赤・緑・青)を変えられる。でも同時に複数の色を変えようとすると、それが反映されないことがあって、結果的に色味のバランスが崩れてしまう。だから今回ChangeBringhtness.batの中では、青だけを変えることで妥協した。

DDC/CIという規格について

ScreenBrightは、DDC/CIいう規格によってディスプレイの設定を変更してくれるソフトだ。だからディスプレイがDDC/CIに対応している必要があるが、対応か否か、メーカーの仕様表に記載されていないことがある。僕が使っているBenQのGW2470というディスプレイもそうだった。

だから一部の高級品だけの機能じゃないだろうし、むしろ対応しているのが当たり前なのかもしれない。

 

BenQ 23.8インチワイド マルチメディアモニター (Full HD/AMVA+パネル/ブルーライト軽減) GW2470H

BenQ 23.8インチワイド マルチメディアモニター (Full HD/AMVA+パネル/ブルーライト軽減) GW2470H