因工作原因,公司给配了一台新的台式机 🖥️,同时,又不想放弃使用自己的笔记本,在只有一台外接显示屏的情况下,达到外接显示随时切换的目的。
最开始,仅通过手动按显示器按钮方式操控,体验下来,太繁琐!!😓
无奈,便寻找更快捷的方式,于是,便有了本文。
记录一键修改视屏输入源的方式,做到 Windows <-> Mac 的无缝切换。
一、Windows端
Windows端切换到Mac,借助ControlMyMonitor软件和Python脚本实现
1.1 ControlMyMonitor
ControlMyMonitor工具是开源免费的,只能在Windows上运行。
该工具主要用于更改显示器配置,它能够快速更改亮度、色温、对比度等设置,支持页面或命令行操作,无需通过显示器按钮。
操作步骤
- 点击下载ControlMyMonitor到本地指定目录
- 打开软件,可以看到如下页面
其中,Input Select代表输入选择,Possible Values代表可选项
经过测试发现,17代表DP源(Windows),15代表VGA源(Mac)
此参数依据显示器支持的输入源和已接入的源变动,每台电脑都不一样,所以需要测试确认源的对应值
-
确认源的对应值后,通过命令行方式,尝试切换输入源:
./controlmymonitor.exe /SetValue Primary 60 15*
命令解析:
- controlmymonitor.exe:及官网下载的软件
- SetValue:该软件的内置命令,用于设定值
- Primary:主显示器
- 60:输入源设定
- 15:VGA输入口(我这里对应Mac)
成功切换后,及代表试验成功。否则,换Possible Values值中另一个试试?
-
既然命令行方式已试验成功,我们试着简化它,不用每次敲命令行。我们可以通过Python脚本实现切换源功能,源码如下:
# cut_source.py
__doc__ = """
用于一键切换视频输入源
"""
import os
import sys
from ctypes import windll
def cut(source):
"""
切换显示器输入源
"""
# 需要修改为本机软件所在路径
exe_path = "cd /d D:\Program Files\controlmymonitor"
cmd = f"{exe_path} && controlmymonitor.exe /SetValue Primary 60 {source}*"
os.system(cmd)
def lock_screen():
"""
锁屏
"""
user = windll.LoadLibrary("user32.dll")
user.LockWorkStation()
if __name__ == "__main__":
# 1: MAC > VGA
# 15: WIN > DP
try:
argv = sys.argv[1]
except Exception as e:
argv = "15" # 默认为15,可手动改
cut(argv)
lock_screen()
说明:
依赖:Python3 运行方式:python cut_source.py [value] 可选参数value:切换目的源(我这里默认为15)
功能描述:
运行该脚本后,切换指定视频输入源并锁屏
- 运行测试后,发现功能有了,但还是不方便(需要运行python脚本,依赖环境)。
因此,我们把脚本编译为Windows可直接运行的.exe文件。使用pyinstaller
库,终端运行:pip install pyinstaller
安装成功后,cd到脚本所在位置,运行 pyinstaller -F cut_source.py -w
,将其编译为.exe文件,目录层级如下:
注意事项 ⚠️:
默认生成的exe会放在dist目录下,我们只需要cut_source.exe文件
生成exe文件后,直接双击就可切换显示器输入源啦。为了更快捷,可将其 发送快捷方式
到桌面 或 固定到任务拦。至此,达到了Windows > Mac的目的。
二、Mac端
使用MAC触发角功能,配置鼠标移到指定位置后将显示器置为睡眠状态
,配合外接显示器自动切换输入源
功能,达到Mac > Windows切换的目的。
三、附录
3.1 pyinstaller参数说明
- -F:打包后只生成单个exe格式文件
- -D:默认选项,创建一个目录,包含exe文件以及大量依赖文件
- -c:默认选项,使用控制台(就是类似cmd的黑框)
- -w:不使用控制台
- -p:添加搜索路径,让其找到对应的库
- -i:改变生成程序的icon图标