Включить отключенный экран с помощью ChangeDisplaySettingsEx - PullRequest
0 голосов
/ 25 апреля 2020

Я использую 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, когда экран отключен. Не работает. Спасибо за любые предложения

1 Ответ

1 голос
/ 28 апреля 2020

Спасибо, ответь Strive Sun. Это работает. Я не могу включить мой "\. \ DISPLAY3" напрямую, Мой «Screen2» будет активен первым, хотя аргумент «Screen3». Но это может легко обойти, как это:

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

Я также попытался использовать EnumDisplayDevices , чтобы получить имя устройства моего монитора. Я получил "\. \ DISPLAY3 \ Monitor0". Но это не удастся в ChangeDisplaySettingsEx, получив -5 результат (означает BAD_PARAM).

...