背景
這幾天新入了一個顯示器 戴爾 D2720DS 感覺很不錯,屏幕大 27寸,分辨率高 2k,能橫著豎著升降,使用很方便。比起我 6 年前買的那個 21 寸 顯示器好得多。
但是這幾天使用下來,發(fā)現(xiàn)了了一個非常不方便的事情:白天我需要講顯示器亮度調(diào)高,晚上又要調(diào)低,非常的繁瑣。這款顯示器又是比較呆的,也沒有一鍵切換情景模式的功能。好在找到了一個可以使用軟件調(diào)整顯示器亮度的方法,這就是 DDC/CI 協(xié)議[1]
開啟 DDC/CI
我這款顯示器是支持 DDC/CI,看使用手冊[2] 開啟 DDC/CI 功能,其他顯示器可以參考官方說明。
然后在安裝官方驅(qū)動程序[3]。也許不用安裝驅(qū)動程序也可以搞,我沒試過,這里直接就安裝了。
DDC/CI 命令行工具
這里我找到了一個可以用 DDC/CI 命令行程序,在 GitHub 開源的。
https://github.com/hensm/ddccli
使用方式還是很簡潔。但是只有 兩顆星星,這么好的工具,趕緊給作者加一個。
看代碼就是調(diào)用 windows 的庫來實現(xiàn)的。另外作者也給出了 nodejs 的庫[4]。
ddccli 使用方式:
Usage: ddccli.exe [options]
Utility for setting brightness/contrast on connected monitors via DDC/CI.
-b, --brightness
Sets monitor brightness
-B, --get-brightness
Gets monitor brightness
-c, --contrast
Sets monitor contrast
-C, --get-contrast
Gets monitor contrast
-h, --help
Prints this help message
-v, --version
Prints the version number
-l, --list
Lists connected monitors
-m, --monitor
Selects a monitor to adjust. If not specified, actions affects all monitors.
編寫腳本
這里我就嘗試直接使用 bat 腳本來調(diào)用這個軟件了,不搞那些花里胡哨的,直接上代碼。
@echo off
set "t=%time: =0%"
set "t=%t:~,5%"
set val=30
if "%t%" geq "09:00" set val=70
if "%t%" geq "19:00" set val=30
echo %val% %t%
"%~dp0ddccli.exe" -b %val%
保存上面的腳本為一個 bat 文件即可,需要注意 ddccli.exe 需要和這個 bat 文件放在一個目錄。
定時執(zhí)行
現(xiàn)在這個腳本已經(jīng)能在 9 點到 19 點之間保持 70% 的亮度,其他時候30% 的亮度。當(dāng)然可以更精細(xì)化調(diào)整甚至根據(jù)日出日落,或者買個光線傳感器來做調(diào)整。這里已經(jīng)可以滿足我的需要了。
使用 Windows 的任務(wù)計劃程序可以設(shè)置讓這個腳本每隔 10 分鐘執(zhí)行一次。
這里使用一個 vbs 腳本來隱藏腳本執(zhí)行時候彈出的黑乎乎的窗口。
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c "&WScript.Arguments(0) ,vbhide
注意不能使用其他用戶運行等設(shè)置來隱藏這個窗口,因為因為程序要獲取顯示器資源來操作。使用 vbs 方式可以避免這個問題。