【发布时间】:2020-08-09 06:16:01
【问题描述】:
我正在使用 WinAPI ChangeDisplaySettingsEx 来切换我的 Windows 10 屏幕配置。
屏幕多于两个,所以 ScreenSwitch.exe 对我来说不够用。
我引用了这个:
https://www.codeproject.com/Articles/178027/How-to-create-a-display-switcher-for-Windows-XP?msg=3850767#xx3850767xx
并成功禁用了这些代码中的屏幕:
string displayName = @"\\.\DISPLAY3";
DEVMODE devMode= new DEVMODE();
devMode.dmPosition.x = 0;
devMode.dmPosition.y = 0;
devMode.dmPelsWidth = 0;
devMode.dmPelsHeight = 0;
devMode.dmFields = DEVMODE_Flags.DM_PELSHEIGHT | DEVMODE_Flags.DM_PELSWIDTH | DEVMODE_Flags.DM_POSITION;
devMode.dmSize = (ushort)Marshal.SizeOf(devMode);
ChangeDisplaySettingsEx(displayName, ref devMode, IntPtr.Zero, (int)(DeviceFlags.CDS_RESET | DeviceFlags.CDS_UPDATEREGISTRY), IntPtr.Zero);
但我无法启用屏幕:
...
devMode.dmPosition.x = -3840;
devMode.dmPosition.y = -1059;
devMode.dmPelsWidth = 3840;
devMode.dmPelsHeight = 2160;
...
ChangeDisplaySettingsEx 得到 -1 结果意味着 CHANGE_FAILED
我猜该屏幕已禁用,因此启用它需要更多信息吗?
我尝试在启用屏幕时保存 DEVMODE,并在禁用屏幕时将其发送到 ChangeDisplaySettingsEx。不工作。
感谢您的任何建议
【问题讨论】:
-
试试:
ChangeDisplaySettingsEx(displayName, ref devMode, IntPtr.Zero, (int)(DeviceFlags.CDS_NORESET | DeviceFlags.CDS_UPDATEREGISTRY), IntPtr.Zero); ChangeDisplaySettingsEx(IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);告诉我它是否有用。