Windows10でアプリケーションごとに輝度を設定、自動で変更する - AutoHotkey

Quick Edit Pencil
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%」がアクティブになった
}

このブログの人気の投稿

書字方向 横書方向変換スクリプト 左書きから右書きへ(コピペ用途)

PowerShellのGetDetailsOf メソッドでプロパティの詳細情報のID番号と項目名を列挙します

PowerShellで複数ファイルのプロパティを取得する方法(準備編)

簡単 YouTube動画をダウンロード、音声のみ保存する方法 2019

DOMノードオブジェクトを文字列に変換する

AppleScript 改行 コード 置換

Blender: 辺の長さを数値で指定するアドオン

PowerShellでJPG画像のリサイズとウォーターマーク画像との合成を同時に行う

VMWare Playerでホストとゲスト間でクリップボードが共有できない時の対処法