Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ChangeDisplaySettingsEx启用禁用的屏幕_C#_Windows_Winapi_Monitor - Fatal编程技术网

C# 使用ChangeDisplaySettingsEx启用禁用的屏幕

C# 使用ChangeDisplaySettingsEx启用禁用的屏幕,c#,windows,winapi,monitor,C#,Windows,Winapi,Monitor,我正在使用WinAPIChangeDisplaySettingsEx切换我的windows 10屏幕配置。 有两个以上的屏幕,所以ScreenSwitch.exe对我来说是不够的 我提到这一点: 并成功禁用以下代码中的屏幕: string displayName = @"\\.\DISPLAY3"; DEVMODE devMode= new DEVMODE(); devMode.dmPosition.x = 0; devMode.dmPosition.y = 0; devMode.dmP

我正在使用WinAPIChangeDisplaySettingsEx切换我的windows 10屏幕配置。
有两个以上的屏幕,所以ScreenSwitch.exe对我来说是不够的

我提到这一点:



并成功禁用以下代码中的屏幕:

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;
...
ChangeDisplaySettingsExGet-1结果表示更改失败

我想那个屏幕已经被禁用了,所以启用它需要更多的信息吗?

我尝试在屏幕启用时保存DEVMODE,在屏幕禁用时将其发送到ChangeDisplaySettingsEx。不管用。


谢谢你的建议

谢谢孙悦的回答。
它起作用了。

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



我还尝试使用EnumDisplayDevices获取显示器的deviceName。
我得到了“\。\DISPLAY3\Monitor0”。

但它将在ChangeDisplaySettingsEx中失败,结果为-5(表示参数不正确)。

尝试:
更改显示设置性别(显示名称,参考devMode,IntPtr.Zero,(int)(DeviceFlags.CDS\u NORESET | DeviceFlags.CDS\u UPDATEREGISTRY),IntPtr.Zero);更改显示设置性别(IntPtr.Zero、IntPtr.Zero、IntPtr.Zero、IntPtr.Zero、IntPtr.Zero)并告诉我它是否有用。参考:很高兴帮助您。您可以标记您的答案以结束此线程。
enableScreen(2);
enableScreen(3);
disableScreen(2);