Windows 一键切换双屏扩展/复制模式脚本分享
背景需求
最近经常使用 UU 远程控制公司的电脑。由于家里是单屏幕,远程时经常需要在“复制”和“扩展”模式之间来回切换,极其不便。为了省事,我整理了几个桌面快捷脚本,实现一键切换,极大提升了单屏远程办公的体验。
这里分享两种实现方式,主推使用 .bat 批处理脚本,简单粗暴。
方案一:使用 Bat 脚本 (极简推荐)
利用 Windows 内置的 DisplaySwitch.exe 工具,直接丢弃了复杂的封装调用。
- 优点:无需管理员权限,直接双击
.bat文件即可生效。 - 原理:直接调用系统参数
DisplaySwitch.exe /extend(扩展) 和DisplaySwitch.exe /clone(复制)。
1. 切换扩展模式.bat 将以下代码保存为 .bat 文件,双击即可进入扩展模式 :
@echo off
chcp 65001 >nul 2>&1
echo 正在切换到【扩展这些显示器】模式...
DisplaySwitch.exe /extend
echo 切换完成!
timeout /t 2 >nul2. 切换复制模式.bat 将以下代码保存为 .bat 文件,双击即可进入复制模式 :
@echo off
chcp 65001 >nul 2>&1
echo 正在切换到【复制这些显示器】模式...
DisplaySwitch.exe /clone
echo 切换完成!
timeout /t 2 >nul方案二:使用 PowerShell 脚本 (API 底层方式)
如果你有更深度的定制需求,可以使用 Windows 推荐的多显示器拓扑切换接口 SetDisplayConfig API。之前常用的 ChangeDisplaySettingsEx + dmDisplayFixedOutput 方法实际上无法正确切换扩展/复制拓扑,所以必须换用新 API。
Extend-Display.ps1 将以下代码保存为 .ps1 文件:
<#
.SYNOPSIS
切换显示器为扩展模式(使用 SetDisplayConfig API)
#>
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class DisplayConfig {
[DllImport("user32.dll")]
public static extern int SetDisplayConfig(
uint numPathArrayElements,
IntPtr pathArray,
uint numModeInfoArrayElements,
IntPtr modeInfoArray,
uint flags
);
public const uint SDC_TOPOLOGY_EXTEND = 0x00000004;
public const uint SDC_APPLY = 0x00000080;
}
"@
$flags = [DisplayConfig]::SDC_TOPOLOGY_EXTEND -bor [DisplayConfig]::SDC_APPLY
$result = [DisplayConfig]::SetDisplayConfig(0, [IntPtr]::Zero, 0, [IntPtr]::Zero, $flags)
if ($result -eq 0) {
Write-Host "已成功切换到【扩展这些显示器】模式" -ForegroundColor Green
} else {
Write-Host "切换失败,错误码: $result" -ForegroundColor Red
}
Read-Host -Prompt "按 Enter 键退出"日常使用建议: 直接把 Bat 脚本扔在桌面上,需要的时候双击一下就行,是最省时省力的方式。
编辑于 2026-02-26 · 著作权归作者所有