はじめに
GPD WINという小型ノートPCがあります。小型故に持ち運ぶ頻度が高いのですが、そうすると困るのが画面の明るさ。
もちろんWindowsのチャームから変更できますが、わざわざチャームを出す1動作が手間な上に、明るさが25%刻みで非常に大雑把です。
また、GPD WINにはスリープ周りに不具合が多く、スリープを使わないこともあります。
その場合、蓋を閉じた場合にはバッテリー持ちを良くするために輝度を0%にしておきたい。
なのでそんなスクリプトを書きました。
機能
- Win+Volume Up: 輝度を10%上げます。
- Win+Volume Down: 輝度を10%下げます。
- 蓋閉じ: 輝度を0%にします。
- 蓋開け: 輝度をもとに戻します。
スクリプト
蓋の開閉を検出するために、こちらのライブラリを使用しました。
リンク先のLidWatcher.ahkをダウンロードし、次のスクリプトと同じフォルダに保存してください。
GPDWINBrightness.ahk
# Include LidWatcher.ahk
prev_brightness := GetBrightness()
r := Start_LidWatcher()
OnExit, cleanup
Return
cleanup:
Stop_LidWatcher(r)
ExitApp
Return
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
}
}
; 蓋の開閉で明るさの変更
LidStateChange(newstate)
{
global prev_brightness
if(newstate == "opened")
{
SetBrightness(Round(prev_brightness, -1))
}
else if(newstate == "closed")
{
prev_brightness := GetBrightness()
SetBrightness(0)
}
}
; キーボードで明るさの変更
# VOLUME_DOWN::SetBrightness(Round(GetBrightness()-10, -1)) ; 0%でもGetBrightness()で返ってくるのが何故か1なので適当に丸める
# VOLUME_UP::SetBrightness(Round(GetBrightness()+10, -1))
おわりに
私自身はスリープを普通に使うので、キーボードによる輝度変更しか使ってませんが、2ch見てるとどうやらこういうスクリプトに需要がありそうだったので公開します。