Windows Server RDP自动化UI测试时分辨率异常变更的解决方法
解决Windows Server tscon会话后分辨率异常(1536x618)的方案
核心原因推测
tscon切换至console会话时,RDP客户端的显示缩放设置被同步到服务器会话,或服务器端显示配置缓存未正确重置,导致分辨率被强制调整为125%缩放对应的数值。
具体解决步骤
1. 强制RDP连接时禁用缩放同步
- 打开RDP配置文件(.rdp),添加以下两行配置:
desktopscalefactor:i:100 winposstr:s:0,1,0,0,1920,1080 - 或在RDP连接窗口的显示选项卡中操作:
- 取消勾选「使用所有监视器的全屏」
- 手动设置远程桌面大小为
1920x1080 - 勾选「不要在远程会话中使用显示缩放」(部分版本需在「高级>显示」中设置)
2. 重置注册表中的显示配置
登录服务器后打开regedit,修改以下项:
- 用户级配置:
路径:HKEY_CURRENT_USER\Control Panel\Desktop- 将
LogPixels改为十进制96(对应100%缩放) - 设置
Win32WindowSize为1920 1080 - 设置
Win32PaddedWindowSize为1920 1080
- 将
- 系统级RDP配置:
路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp- 将
DesktopWidth改为十进制1920 - 将
DesktopHeight改为十进制1080 - 设置
SessionResolutionLimit为0(解除分辨率限制)
修改完成后重启服务器,或执行以下命令重启终端服务:
- 将
net stop termservice && net start termservice
3. 会话切换后强制设置分辨率
在执行tscon %sessionname% /dest:console之后,立即运行命令强制锁定分辨率:
- 使用轻量工具nircmd:
nircmd.exe setdisplay 1920 1080 32 - 或用PowerShell脚本调用Windows API:
Add-Type @" using System; using System.Runtime.InteropServices; public class Display { [DllImport("user32.dll")] public static extern bool ChangeDisplaySettings(ref DEVMODE lpDevMode, int dwFlags); [StructLayout(LayoutKind.Sequential)] public struct DEVMODE { [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] public string dmDeviceName; public short dmSpecVersion; public short dmDriverVersion; public short dmSize; public short dmDriverExtra; public int dmFields; public int dmPositionX; public int dmPositionY; public int dmDisplayOrientation; public int dmDisplayFixedOutput; public short dmColor; public short dmDuplex; public short dmYResolution; public short dmTTOption; public short dmCollate; [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] public string dmFormName; public short dmLogPixels; public int dmBitsPerPel; public int dmPelsWidth; public int dmPelsHeight; public int dmDisplayFlags; public int dmDisplayFrequency; public int dmICMMethod; public int dmICMIntent; public int dmMediaType; public int dmDitherType; public int dmReserved1; public int dmReserved2; public int dmPanningWidth; public int dmPanningHeight; } } "@ $dm = New-Object Display.DEVMODE $dm.dmSize = [System.Runtime.InteropServices.Marshal]::SizeOf($dm) $dm.dmPelsWidth = 1920 $dm.dmPelsHeight = 1080 $dm.dmFields = 0x00000080 | 0x00000100 [Display]::ChangeDisplaySettings([ref]$dm, 0) | Out-Null
4. 检查组策略限制
打开gpedit.msc,导航至路径:计算机配置>管理模板>Windows组件>远程桌面服务>远程桌面会话主机>远程会话环境
- 启用限制最大远程桌面服务会话分辨率,设置分辨率为
1920x1080 - 禁用使用远程桌面服务会话的默认显示设置,允许自定义显示配置
修改后执行gpupdate /force刷新组策略
5. 替代tscon的会话保持方案
若tscon始终触发分辨率问题,可改用以下方式保持会话活跃:
- 用AutoHotkey脚本模拟鼠标移动/键盘输入,避免会话断开
- 配置组策略:
计算机配置>管理模板>Windows组件>远程桌面服务>远程桌面会话主机>会话时间限制,将「活动但空闲的远程桌面服务会话的时间限制」设为「从不」
内容的提问来源于stack exchange,提问作者Josh Kreifels
相关产品推荐
相关产品推荐

