[AHK]--显示器输入源快速切换

前言

当你有多台设备需要共用一台显示器,这个时候通过显示器物理按键频繁切换显示器输入源就会比较麻烦。如果我们可以通过快捷键的方式切换的话,将会方便不少。

本文将介绍如何在windows环境下使用ahk脚本实现显示器输入源快捷键切换。

参考资料:https://www.chiphell.com/thread-2248082-1-1.html

DDC/CI 协议简介

DDC/CI协议是Display Data Channel Command Interface的简称。基于DDC/CI协议,用户可以通过鼠标和人性化的软件界面来完成显示器的各项设置和色彩调节,而不必使用传统的OSD菜单。

以上简介来自百度百科,其实DDC/CI协议说白了就是可以让我们连接显示器的设备与显示器之间进行通信,方便我们调节显示器的设置。

本文所介绍的显示器输入源快速切换的方法需要你的显示器支持DDC/CI协议,请确保你的显示器支持该协议并打开该设置。

Auto Hot Key简介

Auto Hot Key是一款免费的、Windows下开源的热键脚本语言。也可以通过命令调用系统接口及程序,并创建基于简单语言的图形化界面的执行程序。

官网地址:Auto Hot Key

如果你的电脑没有安装Auto Hot Key,你可以访问以上官网进行下载安装。

显示器输入源快捷键切换ahk脚本代码

首先新建一个.ahk文件。

在这里插入图片描述

然后在该文件中写入以下代码:

(其中切换各个输入源的id需要你根据你自己的显示器去更改,以下是适用于aoc u2790pqu显示器的ahk脚本,我还测试了benq ew2770qz显示器,也可以使用)

; 函数getMonitorHandle()和destroyMonitorHandle(handle)涉及到windows编程,本人水平有限,没弄懂如何编写,只会使用,感兴趣的可以自己看看英文原注释
; Finds monitor handle based on MousePosition
getMonitorHandle()
{
  ; Initialize Monitor handle
  hMon := DllCall("MonitorFromPoint"
    , "int64", 0 ; point on monitor
    , "uint", 1) ; flag to return primary monitor on failure

   
  ; Get Physical Monitor from handle
  VarSetCapacity(Physical_Monitor, 8 + 256, 0)

  DllCall("dxva2\GetPhysicalMonitorsFromHMONITOR"
    , "int", hMon   ; monitor handle
    , "uint", 1   ; monitor array size
    , "int", &Physical_Monitor)   ; point to array with monitor

  return hPhysMon := NumGet(Physical_Monitor)
}

destroyMonitorHandle(handle)
{
  DllCall("dxva2\DestroyPhysicalMonitor", "int", handle)
}

; 更改显示器输入源函数
; Used to change the monitor source
setMonitorInputSource(source)
{
  handle := getMonitorHandle()
  DllCall("dxva2\SetVCPFeature"
    , "int", handle
    , "char", 0x60 ;VCP code for Input Source Select
    , "uint", source)
  destroyMonitorHandle(handle)
}

; 获取显示器输入接口id函数
; Gets Monitor source
getMonitorInputSource()
{
  handle := getMonitorHandle()
  DllCall("dxva2\GetVCPFeatureAndVCPFeatureReply"
    , "int", handle
    , "char", 0x60 ;VCP code for Input Source Select
    , "Ptr", 0
    , "uint*", currentValue
    , "uint*", maximumValue)
  destroyMonitorHandle(handle)
  return currentValue
}

; BenQ ew2770qz 输入接口id
; dp=16=10H=0x10
; hdmi1=17=11H=0x11
; hdmi2=18=12H=0x12

; AOC U2790PQU 输入接口id
; dp=15=0fH=0x0f
; hdmi1=17=11H=0x11
; hdmi2=18=12H=0x12

; 设置快捷键win+z, 获取显示器输入接口id
; Get sources~id
#z::
MsgBox, % getMonitorInputSource()
return

; 设置快捷键win+x, 切换dp输入源
; Switching sources~dp
#x::
;to dp
setMonitorInputSource(0x0f)
return

; 设置快捷键win+c, 切换hdmi 1输入源
; Switching sources~hdmi1
#c::
;to hdmi1
setMonitorInputSource(0x11)
return

; 设置快捷键win+v, 切换hdmi 2输入源
; Switching sources~hdmi2
#v::
;to hdmi2
setMonitorInputSource(0x12)
return

获取你的显示器的输入源id

右击你的ahk脚本,使用Auto Hot Key打开运行。

按下win+z获取显示器当前输入源id:

在这里插入图片描述

15是十进制id,其16进制为0fH,我们更改脚本时参数要输入为0x0f

setMonitorInputSource(0x0f)

其他输入源的id我们可以手动切换显示器输入源,然后盲按win+z键获取id,接着切换回windows就可以拿到其他输入源id了。

编译成.exe可执行文件

打开Convert .ahk to .exe

在这里插入图片描述

选择你的ahk脚本,点击下方Convert即可编译成.exe可执行文件,可以在其他没有安装Auto Hot Key的电脑上直接运行。

在这里插入图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值