使用ChangeDisplaySettingsEx启用禁用的屏幕

问题描述 投票:0回答:1

我正在使用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。不行谢谢你的建议

c# windows winapi monitor
1个回答
1
投票

感谢Strive Sun的回答。这行得通。我无法直接启用“ \。\ DISPLAY3”,尽管参数为“ Screen3”,但我的“ Screen2”将首先处于活动状态。但是它可以轻松解决,如下所示:

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

我还尝试使用EnumDisplayDevices来获取监视器的deviceName。我得到了“ \。\ DISPLAY3 \ Monitor0”。但是它将在ChangeDisplaySettingsEx中失败,得到-5结果(表示BAD_PARAM)。

© www.soinside.com 2019 - 2024. All rights reserved.