基于Python的Windows多显示器配置切换脚本开发需求
我之前也碰到过这种多显示设备来回切换的麻烦,每次手动进显示设置断连真的太折腾了!刚好可以用Python调用Windows的系统API来实现一键切换,完美适配你说的两种场景。
下面是完整的实现方案:
准备工作
首先得安装pywin32库,因为要用到Windows的显示控制接口,打开命令提示符跑这个:
pip install pywin32
然后你需要先获取自己每台显示设备的设备实例路径(这是唯一标识,避免搞错显示器),运行这段小脚本就能列出所有设备:
import win32api import win32con import win32gui def get_all_displays(): displays = [] def callback(hmonitor, hdc_monitor, lprc_monitor, dw_data): info = win32api.GetMonitorInfo(hmonitor) displays.append({ "name": info["Device"], "is_primary": info["Flags"] == win32con.MONITORINFOF_PRIMARY, "rect": info["Monitor"] }) return True win32gui.EnumDisplayMonitors(None, None, callback, None) return displays for idx, display in enumerate(get_all_displays(), 1): print(f"显示器{idx}: 设备名 = {display['name']}, 是否主显示器 = {display['is_primary']}")
运行后会输出类似这样的内容:
显示器1: 设备名 = \\.\DISPLAY1, 是否主显示器 = False 显示器2: 设备名 = \\.\DISPLAY2, 是否主显示器 = False 显示器3: 设备名 = \\.\DISPLAY3, 是否主显示器 = True 显示器4: 设备名 = \\.\DISPLAY4, 是否主显示器 = False
把这个输出里的设备名对应到你说的「显示器1/2/3/4」和4K电视,记下来替换到下面的主脚本里。
一键切换脚本
把下面的代码保存为display_switcher.py,然后替换DEVICE_MAPPING里的设备名,对应你的实际设备:
import win32api import win32con import win32gui import sys # 替换成你自己的显示器设备名,对应你定义的编号 DEVICE_MAPPING = { "monitor_1": "\\\\.\\DISPLAY1", # 你的办公副显示器1 "monitor_2": "\\\\.\\DISPLAY2", # 4K电视 "monitor_3": "\\\\.\\DISPLAY3", # 主显示器 "monitor_4": "\\\\.\\DISPLAY4" # 办公副显示器2 } def set_display_state(device_name, enabled=True, is_primary=False): # 获取显示设备当前模式 dm = win32api.EnumDisplaySettings(device_name, win32con.ENUM_CURRENT_SETTINGS) # 设置启用状态:DM_DISABLED表示禁用,否则启用 dm.dmFields = win32con.DM_DISPLAYFLAGS if not enabled: dm.dmDisplayFlags = win32con.DM_DISABLED else: dm.dmDisplayFlags = 0 # 设置主显示器(强制放在(0,0)位置) if is_primary: dm.dmFields |= win32con.DM_POSITION dm.dmPosition = (0, 0) # 应用设置并刷新 win32api.ChangeDisplaySettingsEx(device_name, dm, win32con.CDS_UPDATEREGISTRY | win32con.CDS_NORESET) win32api.ChangeDisplaySettingsEx(None, None, win32con.CDS_RESET) def switch_to_work_mode(): print("切换到工作模式...") # 启用主显示器3并设为主屏 set_display_state(DEVICE_MAPPING["monitor_3"], enabled=True, is_primary=True) # 启用办公副显示器1和4 set_display_state(DEVICE_MAPPING["monitor_1"], enabled=True) set_display_state(DEVICE_MAPPING["monitor_4"], enabled=True) # 禁用4K电视 set_display_state(DEVICE_MAPPING["monitor_2"], enabled=False) def switch_to_movie_mode(): print("切换到观影模式...") # 保留主显示器3作为主屏 set_display_state(DEVICE_MAPPING["monitor_3"], enabled=True, is_primary=True) # 启用4K电视 set_display_state(DEVICE_MAPPING["monitor_2"], enabled=True) # 禁用办公副显示器1和4 set_display_state(DEVICE_MAPPING["monitor_1"], enabled=False) set_display_state(DEVICE_MAPPING["monitor_4"], enabled=False) if __name__ == "__main__": if len(sys.argv) != 2: print("请指定模式:") print(" python display_switcher.py --work # 切换到工作模式") print(" python display_switcher.py --movie # 切换到观影模式") sys.exit(1) mode = sys.argv[1] if mode == "--work": switch_to_work_mode() elif mode == "--movie": switch_to_movie_mode() else: print(f"未知模式: {mode}") sys.exit(1) print("模式切换完成!")
使用方法
- 确保已经替换了
DEVICE_MAPPING里的设备名,和你的实际显示设备对应上 - 打开命令提示符,运行:
- 切换工作模式:
python display_switcher.py --work - 切换观影模式:
python display_switcher.py --movie
- 切换工作模式:
进阶优化(可选)
如果不想每次开命令行,你可以创建两个快捷方式:
- 工作模式快捷方式:目标填
python "C:\你的脚本路径\display_switcher.py" --work - 观影模式快捷方式:目标填
python "C:\你的脚本路径\display_switcher.py" --movie
然后把快捷方式放桌面,双击就能一键切换了!
内容的提问来源于stack exchange,提问作者AnnonymKnuckles
相关产品推荐
相关产品推荐

