news 2026/6/9 1:53:16

调用ControlMyMonitor工具调节亮度与变换信号

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
调用ControlMyMonitor工具调节亮度与变换信号

在多设备共用一套显示器的场景下,频繁手动切换信号源和调节亮度是一件繁琐且打断工作流的事情。比如主机和笔记本通过KVM共用显示屏,每次切换设备往往需要按显示器的实体键,操作零散、体验割裂。

本方案基于AutoHotkey v2.0和ControlMyMonitor工具,通过简单的快捷键组合,实现对多台显示器的一键信号切换和亮度同步调节。

适用环境:Windows + AutoHotkey v2.0 + ControlMyMonitor
功能:一键切换信号源、长按调节亮度、亮度自动记忆
难度:⭐⭐(只需改几个路径参数,无需编程基础)


📌 一、这个脚本能干什么?

操作快捷键效果
🔄 切换信号源ScrollLock + F12显示器切换信号
☀️ 增加亮度长按ScrollLock + Pause同步提亮
🌙 降低亮度长按ScrollLock + PrintScreen同步降亮
⚙️ 设置初始亮度Pause + PrintScreen弹窗输入亮度值

✅ 亮度自动保存,下次开机自动恢复
✅ 长按亮度分两档速度:前7步慢调(防手抖),7步后快调(省时间)


🛠 二、使用前准备

1. 下载两个工具

工具下载地址说明
AutoHotkey v2.0https://www.autohotkey.com/脚本运行环境
ControlMyMonitorhttps://www.nirsoft.net/utils/control_my_monitor.html显示器控制工具

不会科学上网的,也可以自己找资源。

2. 解压 ControlMyMonitor

ControlMyMonitor.exe放到你喜欢的位置,比如:

  1. E:\ControlMyMonitor\ControlMyMonitor.exe

🎯 三、找到你的显示器ID(必须做!)

每个显示器的”身份证号”不同,需要先查出来。

步骤:

  1. 打开ControlMyMonitor.exe
  2. 看上半部分的显示器列表,类似这样:
    1. \\.\DISPLAY1\Monitor0
    2. \\.\DISPLAY2\Monitor0
    3. \\.\DISPLAY1\Monitor1
  3. 把你看到的ID记下来,后面要填进脚本里。
  4. 两台显示器,分别处于不同模式下,如扩展、仅在2上显示,显示器ID会变化需要记录下来。

🔍 如果只显示一个显示器,检查显示器连接,或者点File → Rescan Monitors


✏️ 四、修改脚本参数(只需改这几处)

打开脚本,找到最上面的这几行,改成你自己的:

  1. exePath := "E:\ControlMyMonitor\ControlMyMonitor.exe" ; ← 改成你的exe路径
  2. ; 改成你查到的三个显示器ID
  3. monitorA := "\\.\DISPLAY1\Monitor0"
  4. monitorB := "\\.\DISPLAY2\Monitor0"
  5. monitorC := "\\.\DISPLAY1\Monitor1"
  6. SendSwitchAll(7, "切换到主机") ← 这是你传入的信号,如下图小方框的内容。不同显示器输出的信号不同。假设你的两台电脑A(插DP)信号为7,另一个B(插typeC)为17。A切到B,应该填17。可以在ControlMyMonitor.exe改值试试。

⚠️ 只用拓展,只有两个显示器ID,删掉 monitorC 的那行,并把下面代码里所有monitorC的行也删掉。


🚀 五、运行脚本

  1. 双击.ahk脚本文件
  2. 任务栏右下角出现绿色 H 图标 = 运行成功
  3. 试试按ScrollLock + Pause,看亮度有没有变化

🎮 六、功能详解

🔄 信号源切换 —ScrollLock + F12

  • 怎么按:按住ScrollLock不松,再按F12
  • 干嘛用:三个显示器一起切换到主机信号(VCP代码=7)
  • 提示:屏幕会弹出”切换到主机”提示,1.2秒后自动消失

💡 如果 F12 有别的功能(比如浏览器开发者工具),脚本不影响它单独使用。


☀️🌙 亮度调节 — 长按ScrollLock + PrintScreen/Pause

  • 怎么按:按住ScrollLock不松,再按住PrintScreen(降亮)或Pause(提亮)
  • 调速机制
    • 7 次调节 → 每次间隔 200ms(慢慢来,防手抖跳太多)
    • 8 次开始 → 每次间隔 100ms(加速,快速到位)
  • 提示:屏幕实时显示”亮度 XX”

🎯 松开按键即停止,想调多少调多少。


⚙️ 设置初始亮度 —Pause + PrintScreen

  • 怎么按:同时按PausePrintScreen
  • 干嘛用:弹出一个输入框,输入想要的亮度值(0-100)
  • 留空:保持当前亮度不变
  • 输入:立即跳到指定亮度,并自动保存

💾 以后每次开机都会自动恢复你设置的这个亮度。


📝 七、常见问题

❓ 按了没反应?

  1. 检查脚本是否在运行(任务栏绿色 H 图标)
  2. 检查显示器ID是否写对了
  3. 检查exePath路径是否正确
  4. 试试手动打开ControlMyMonitor.exe能否正常操作

❓ 只有一个显示器变了?

  • 检查三个monitorA/B/C是不是都写对了
  • ControlMyMonitor手动测一下每个显示器的VCP代码10是否可用

❓ 想改成其他信号源?

  • 修改这行里的数字:SendSwitchAll(7, "切换到主机")
  • 常见VCP信号源值:15=DisplayPort,17=HDMI

❓ 不想三个显示器同步?

  • 删掉不需要的monitor行,以及SetBrightnessSendSwitchAll里对应的Run

🔄 八、开机自启(可选)

  1. 使用Compile打包选中的.ahk脚本文件,生成.exe文件。exe文件运行不需要额外配置,可以再不同电脑上运行。打包可能要科学上网,没有的话使用.ahk脚本文件也可以,只是麻烦点
  2. Win + R,输入shell:startup,回车
  3. 把脚本的快捷方式拖进去
  4. 下次开机自动运行

📄 完整脚本

  1. #Requires AutoHotkey v2.0 exePath := "E:\ControlMyMonitor\ControlMyMonitor.exe" brightnessCode := 10 ; 亮度VCP代码 sourceCode := 60 ; 信号源VCP代码 configFile := "brightness_config.txt" ; 三个显示器 monitorA := "\\.\DISPLAY1\Monitor0" monitorB := "\\.\DISPLAY2\Monitor0" monitorC := "\\.\DISPLAY1\Monitor1" ; ========== 加载保存的亮度 ========== LoadBrightness() { global currentBrightness try { content := FileRead(configFile) if (content != "") { savedValue := Integer(content) if (savedValue >= 0 and savedValue <= 100) { currentBrightness := savedValue return true } } } catch { ; 文件不存在或读取失败 } return false } ; ========== 保存亮度到文件 ========== SaveBrightness() { global currentBrightness try { FileDelete(configFile) } FileAppend(currentBrightness, configFile) } ; ========== 默认初始亮度 ========== if !LoadBrightness() { currentBrightness := 10 } ; ========== 设置亮度(三个显示器同步)========== SetBrightness(value) { global currentBrightness value := Min(Max(value, 0), 100) if (value = currentBrightness) { return } currentBrightness := value Run(exePath ' /SetValue "' monitorA '" ' brightnessCode ' ' value, , "Hide") Sleep 50 Run(exePath ' /SetValue "' monitorB '" ' brightnessCode ' ' value, , "Hide") Sleep 50 Run(exePath ' /SetValue "' monitorC '" ' brightnessCode ' ' value, , "Hide") ToolTip("亮度 " value) SetTimer(() => ToolTip(), -800) SaveBrightness() } ; ========== 调节亮度 ========== AdjustBrightness(delta) { global currentBrightness newValue := currentBrightness + delta SetBrightness(newValue) } ; ========== 切换信号源(三个显示器同步)========== SendSwitchAll(value, tip) { Run(exePath ' /SetValue "' monitorA '" ' sourceCode ' ' value, , "Hide") Sleep 100 Run(exePath ' /SetValue "' monitorB '" ' sourceCode ' ' value, , "Hide") Sleep 100 Run(exePath ' /SetValue "' monitorC '" ' sourceCode ' ' value, , "Hide") ToolTip(tip) SetTimer(() => ToolTip(), -1200) } ; ========== 手动输入初始亮度 ========== SetInitialBrightness() { global currentBrightness userInput := InputBox("请输入初始亮度值 (0-100):`n如果留空则使用默认值 10", "初始亮度设置", , "10") if (userInput.Result = "Cancel" or userInput.Value = "") { ToolTip("保持当前亮度: " currentBrightness) SetTimer(() => ToolTip(), -1200) } else { newValue := Min(Max(Integer(userInput.Value), 0), 100) SetBrightness(newValue) ToolTip("初始亮度已设置为: " newValue) SetTimer(() => ToolTip(), -1200) } } ; ========== 快捷键 ========== ; 切换信号源:ScrollLock + F12 → 切换到主机 ~ScrollLock:: { ih := InputHook("V T1", "{F12}") ih.Start() ih.Wait() if (ih.EndKey = "F12") { SendSwitchAll(7, "切换到主机") } } ; 降低亮度:ScrollLock + PrintScreen(长按) ScrollLock & PrintScreen:: { stepCount := 0 while GetKeyState("PrintScreen", "P") { stepCount++ AdjustBrightness(-1) if (stepCount <= 7) { Sleep(200) } else { Sleep(100) } } } ; 增加亮度:ScrollLock + Pause(长按) ScrollLock & Pause:: { stepCount := 0 while GetKeyState("Pause", "P") { stepCount++ AdjustBrightness(1) if (stepCount <= 7) { Sleep(200) } else { Sleep(100) } } } ; 设置初始亮度 Pause & PrintScreen:: SetInitialBrightness() PrintScreen & Pause:: SetInitialBrightness()

1.代码如此麻烦是由于/GetValue获取不到当前数据,只好退而求其次之。

2.遇到问题,问问ai,基本上问题都能解决。

3.两机都要切换信号,需要两份代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 1:52:09

第1章:LangChain 入门(上)

一、从 API 调用到应用开发&#xff0c;中间缺了什么&#xff1f;如今调用一个大模型 API 已经变得非常简单&#xff0c;几行代码就能拿到回复。但一旦你试图把大模型能力集成到实际产品中&#xff0c;就会发现事情没那么单纯。1.1 原生 API 开发的三大痛点痛点一&#xff1a;每…

作者头像 李华
网站建设 2026/6/9 1:46:23

绝区零一条龙全自动助手:告别重复操作,解放你的双手

绝区零一条龙全自动助手&#xff1a;告别重复操作&#xff0c;解放你的双手 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon …

作者头像 李华
网站建设 2026/6/9 1:37:16

免费一键去图片水印的app有哪些?2026免费去图片水印app排行榜

日常收藏图片或视频素材时&#xff0c;遇上恼人的水印总是让人头疼。不管是网上的表情包、设计灵感&#xff0c;还是喜欢的短视频片段&#xff0c;一个水印就让画面不完整。其实&#xff0c;现在有不少免费工具能帮我们轻松搞定这件事。今天这篇个人收藏与学习向的实用教程&…

作者头像 李华
网站建设 2026/6/9 1:37:15

幼小阶段偏爱模仿言行,家长举止会成为无形榜样

很多家长会发现&#xff0c;孩子从两三岁开始特别喜欢模仿大人。妈妈打电话&#xff0c;他也拿起玩具手机咿咿呀呀&#xff1b;爸爸修东西&#xff0c;他蹲在旁边有模有样地拧螺丝。到了五六岁&#xff0c;孩子不仅模仿动作&#xff0c;还会学大人的语气和表情。这个阶段的孩子…

作者头像 李华
网站建设 2026/6/9 1:32:12

从RS-485硬件接线到Modbus报文调试:一个STM32工控小项目的完整踩坑实录

从RS-485硬件接线到Modbus报文调试&#xff1a;一个STM32工控小项目的完整踩坑实录工业控制领域的通信系统就像人体的神经系统&#xff0c;任何微小的连接错误都可能导致整个系统瘫痪。去年接手的一个小型自动化项目让我深刻体会到了这一点——原本以为简单的STM32与触摸屏Modb…

作者头像 李华