You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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("模式切换完成!")

使用方法

  1. 确保已经替换了DEVICE_MAPPING里的设备名,和你的实际显示设备对应上
  2. 打开命令提示符,运行:
    • 切换工作模式: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:04:56