# 背景
这几天新入了一个显示器 戴尔 D2720DS (opens new window) 感觉很不错,屏幕大 27寸,分辨率高 2k,能横着竖着升降,使用很方便。比起我 6 年前买的那个 21 寸 显示器好得多。
但是这几天使用下来,发现了了一个非常不方便的事情:白天我需要讲显示器亮度调高,晚上又要调低,非常的繁琐。这款显示器又是比较呆的,也没有一键切换情景模式的功能。好在找到了一个可以使用软件调整显示器亮度的方法,这就是 DDC/CI 协议^1 (opens new window)
# 开启 DDC/CI
我这款显示器是支持 DDC/CI,看使用手册[^2] 开启 DDC/CI 功能,其他显示器可以参考官方说明。
然后在安装官方驱动程序[^3]。也许不用安装驱动程序也可以搞,我没试过,这里直接就安装了。
# DDC/CI 命令行工具
这里我找到了一个可以用 DDC/CI 命令行程序,在 GitHub 开源的。
https://github.com/hensm/ddccli (opens new window)
使用方式还是很简洁。但是只有 两颗星星,这么好的工具,赶紧给作者加一个。
看代码就是调用 windows 的库来实现的。另外作者也给出了 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.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 编写脚本
这里我就尝试直接使用 bat 脚本来调用这个软件了,不搞那些花里胡哨的,直接上代码。
@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%
2
3
4
5
6
7
8
9
10
11
12
保存上面的脚本为一个 bat 文件即可,需要注意 ddccli.exe
需要和这个 bat 文件放在一个目录。
# 定时执行
现在这个脚本已经能在 9 点到 19 点之间保持 70% 的亮度,其他时候30% 的亮度。当然可以更精细化调整甚至根据日出日落,或者买个光线传感器来做调整。这里已经可以满足我的需要了。
使用 Windows 的任务计划程序可以设置让这个脚本每隔 10 分钟执行一次。
这里使用一个 vbs 脚本来隐藏脚本执行时候弹出的黑乎乎的窗口。
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c "&WScript.Arguments(0) ,vbhide
2
注意不能使用其他用户运行等设置来隐藏这个窗口,因为因为程序要获取显示器资源来操作。使用 vbs 方式可以避免这个问题。
[^2]: Dell D2720DS 用户指南 (opens new window)
[^3]: Dell D2720DS 驱动程序 (opens new window)
[^4]: https://github.com/hensm/node-ddcci (opens new window)