使用 ChangeDisplaySettingsEx 启用禁用的屏幕

Enable a disabled screen using ChangeDisplaySettingsEx

我正在使用 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。不行。

感谢任何建议

感谢 Strive Sun 的回答。
这行得通。

我无法直接启用我的“\.\DISPLAY3”,
我的 "Screen2" 将首先激活,尽管参数是 "Screen3"。
但它可以轻松解决问题,如下所示:

enableScreen(2);
enableScreen(3);
disableScreen(2);



我还尝试使用 EnumDisplayDevices 来获取我的显示器的设备名称。
我得到了“\.\DISPLAY3\Monitor0”。

但它会在 ChangeDisplaySettingsEx 中失败,得到 -5 结果(意味着 BAD_PARAM)。