AutoHotkeyスクリプトで実現。
AutoHotkeyをダウンロードしてスクリプトをコピペして輝度を変更したいソフトを指定してファイル保存、保存したファイルをダブルクリックして実行するとタスクバーの通知エリアに常駐するので、不要になれば終了する。とても簡単です。
グラフィック系アプリを使うときは最大輝度にて、ブラウザやオフィス系アプリに移動したらデフォルトの輝度に戻す-という使い方が最近多い。
チャームから輝度を変更できるが都度面倒なので、アプリを切り替える度に、設定した輝度に自動で変更するスクリプトを調べてみた。(イベントはアクティブウインドウの変更又はActiveWindowの切り替え)
フリーソフトなども調べてみたがアプリ毎に輝度を設定できるユーティリティは見つけられなかった。
当初、PowerShellで実現できる予定だったが、アクティブウインドウ変更のイベント取得方法がわからなかったので、AutoHotkeyを使いアプリ毎に輝度の変更を自動で行うスクリプトをつくってみた。(ほぼコピペでスミマセン、一応思い通りの結果が得られて満足)
マーカー部分が追記分
60行目に輝度を設定するアプリを文字列で指定。アプリ毎に識別できる文字列を含む変数が違うので
ウィンドウを特定する - hogeを参考に設定。
ノートやタブレットなどの液晶一体型でウインドウズから輝度を調整できるパソコンでのみ効きます。
#Persistent ; スクリプトを常駐させる
/*
GPD WINの画面輝度をあれこれするAutoHotkeyスクリプト
http://qiita.com/diaphragm/items/9769c79789d7a9958f8a
輝度を変更するスクリプト
*/
prev_brightness := GetBrightness()
GetBrightness()
{
WMI := "winmgmts:{impersonationLevel=impersonate}!\\.\root\WMI"
MonitorBrightness := ComObjGet(WMI).ExecQuery("SELECT * FROM WmiMonitorBrightness WHERE Active=TRUE")
for i in MonitorBrightness {
brightness := i.CurrentBrightness
break
}
Return, %brightness%
}
SetBrightness(value)
{
WMI := "winmgmts:{impersonationLevel=impersonate}!\\.\root\WMI"
MonitorBrightnessMethods := ComObjGet(WMI).ExecQuery("SELECT * FROM wmiMonitorBrightNessMethods WHERE Active=TRUE")
if value < 0
value := 0
for i in MonitorBrightnessMethods {
i.WmiSetBrightness(5, value)
break
}
}
/*
Windowsのイベントを拾う
https://sites.google.com/site/agkh6mze/howto/winevent#TOC-WinEvent-
ここではアクティブウィンドウが切り替わった時に、指定の関数が呼ばれるようにしてみる。
*/
myFunc := RegisterCallback("WinActivateHandler")
myHook := DllCall("SetWinEventHook"
, "UInt", 0x00000003 ; eventMin : EVENT_SYSTEM_FOREGROUND
, "UInt", 0x00000003 ; eventMax : EVENT_SYSTEM_FOREGROUND
, "UInt", 0 ; hModule : self
, "UInt", myFunc ; hWinEventProc :
, "UInt", 0 ; idProcess : All process
, "UInt", 0 ; idThread : All threads
, "UInt", 0x0003 ; dwFlags : WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS
, "UInt")
WinActivateHandler(hWinEventHook, event, hwnd, idObject, idChild, thread, time) {
WinGetTitle, title, ahk_id %hwnd%
WinGetClass, class, ahk_id %hwnd%
global prev_brightness
if (RegExMatch(title, "^Blender")) {
;Tooltip, カスタム輝度 %prev_brightness%
prev_brightness := GetBrightness()
SetBrightness(100)
} else {
;Tooltip, デフォルト輝度 %prev_brightness%
SetBrightness(prev_brightness)
}
;Tooltip, 「%title% ahk_class %class%」がアクティブになった
}