MENU

PCディスプレイの輝度を半自動で変更する

今年の始めに、ノートPCを外付けディスプレイの裏側に取り付けた。

hiki-jiritsu.hatenablog.com

最近さらに整理して、USBハブやACアダプタも収まるようになった。省スペースだし配線もすっきりするしメリットしかないと思っていたが、ディスプレイの輝度調整は面倒くさい。ノートPCならファンクションキーから変更できるのに、今使っているディスプレイ(GW2470)はボタンをちまちま連打長押しなければならない。

今までそれが問題になることはなかったが、最近部屋の模様替えをしたらディスプレイと窓が向かい合う形になって、日中は輝度を上げないと(ノングレア液晶とはいえ)映りこみが気になってしまう。かといってそのままだと夜まぶしい。

自動調整機能があればなーと思いながらなんとなくディスプレイの設定メニューを眺めていたら、「DDC/CI」という見慣れない項目を見つけた。調べてみるとなんと、ディスプレイをPCからコントロールするための規格らしい。これを生かさない手はない。

調べた中でよさげだった、DDC/CI対応のフリーソフトはこの3つ。

・ScreenBright
・Display Tuner
・softMCCS

このうちDisplay Tunerは、設定をプロファイルとして保存してキーボードから切り替えられる。本命だったが対応していなかった。softMCCSはやたら設定項目が多く輝度変更の動作がぎこちない。結果的にシンプルで常駐もしないScreenBrightに決めた。

f:id:h_imwikr:20160906193427p:plain

せっかくだから、できるだけ少ない手数で輝度を変更したい。おぼつかない手つきでスクリプト(VBScript)を書いた。

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

Dim shell
Dim exec

Set shell = CreateObject("WScript.Shell")
Set exec = shell.Exec("D:\ユーザー名\Downloads\ScreenBright\ScreenBright.exe") 'ScreenBright.exeの場所を指定

'ウィンドウがアクティブになるまで待機
'shell.Run()だとアクティブにならなかった
Do while Not shell.AppActivate(exec.ProcessID)
	Wscript.Sleep 100
Loop

shell.SendKeys "{TAB 4}" + Keys() + "%{F4}" '輝度を変更してAlt + F4で閉じる

set shell = Nothing
Set exec = Nothing

'時間帯に応じたキーを取得
Function Keys()
	const MORNING = "6:00:00"
	Const EVENING = "17:00:00"
	Dim currentTime

	currentTime = Time

	If currentTime >= TimeValue(MORNING) Then 
		If currentTime < TimeValue(EVENING) Then '日中
			Keys = "{HOME}" '100%
		Else '夕方から深夜まで
			Keys = "{END}{PGUP}{UP}{UP 25}" '25%
		End IF
	Else '深夜(0時以降)
		Keys = "{END}" '0%
	End If
End Function

出来上がったvbsファイルを「MakeExe」でexe形式に変換して、タスクバーにピン止めすれば、それをクリックするだけで時間帯に応じた輝度に変更できる。

本当はスケジュールを組んで全自動で変更したいが、ウィンドウを開いてキーボード操作する方法ではできそうにない。

 

追記

だいぶ改善した

hiki-jiritsu.hatenablog.com