Как я включаю второй монитор в C#?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

19
задан Glorfindel 14 February 2019 в 20:40
поделиться

4 ответа

Функции Контекста устройства MSDN

, Что в основном необходимо сделать:

Использование EnumDisplayDevices () вызов API, чтобы перечислить дисплеи в системе и искать тех, которые не имеют DISPLAY_DEVICE_ATTACHED_TO_DESKTOP, флаг установил (это будет включать любые устройства зеркального отражения так не, все будут физическими дисплеями.), После того как Вы нашли дисплей, на который необходимо будет заставить допустимый режим отображения изменять его, можно найти это путем называния EnumDisplaySettingsEx () вызовом API - Обычно Вы отобразили бы все доступные режимы и позволили бы пользователю выбирать однако в Вашем случае, он кажется, что это может быть возможно к твердому коду и сохранить Вас дополнительный шаг. Ради соответствования требованиям завтрашнего дня Вашего приложения, хотя я предложил бы иметь это легко изменяемое, не имея необходимость рыть через источник каждый раз, ключ реестра будет очевидным выбором. После того как Вам разобрались, это заполняет структуру дисплея DevMode с информацией о расположении дисплея (установите PelsWidth/Height, Положение, свойства DisplayFrequency и BitsPerPel), затем установите эти флаги в полевом участнике. Наконец назовите ChangeDisplaySettingsEx () с этой структурой настроек и обязательно отправьте сброс и флаги реестра обновления. Это должно быть всем, в чем Вы нуждаетесь, надеетесь, что это помогает,

импорт структуры DISPLAY_DEVICE с помощью импорта функции PInvoke

EnumDisplayDevices

импорт функции EnumDisplaySettingsEx

и т.д. остальная часть их, функции могут быть найдены с простым поиском по имени.

13
ответ дан 30 November 2019 в 04:16
поделиться

У меня нет полного ответа здесь, но я почти уверен, что необходимо будет звонить из .NET, чтобы сделать это. Необходимо будет использовать Pinvoke для вызова неуправляемого dll. Большим ресурсом для этого является pinvoke.net.

я сделал быстрый поиск и нашел http://www.pinvoke.net/default.aspx/user32/ChangeDisplaySettings.html , который, вероятно, не является точно, что Вы хотите, но Вы, вероятно, найдете его где-нибудь на pinvoke.net

2
ответ дан 30 November 2019 в 04:16
поделиться

Я ищу то же решение. Я написал следующий код для вызова ChangeDisplaySettingsEx с PInvoke:

DEVMODE dm = new DEVMODE();
dm.dmSize = (short)Marshal.SizeOf(dm);
dm.dmPelsWidth = 1680;
dm.dmPelsHeight = 1050;
dm.dmBitsPerPel = 32;
dm.dmDisplayFrequency = 60;
dm.dmFields = DevModeFields.DM_BITSPERPEL | DevModeFields.DM_PELSWIDTH | 
              DevModeFields.DM_PELSHEIGHT | DevModeFields.DM_DISPLAYFREQUENCY;
int res = ChangeDisplaySettingsEx(@"\\.\DISPLAY2", ref dm, IntPtr.Zero, CDS_RESET | CDS_UPDATEREGISTRY, IntPtr.Zero);
Console.WriteLine("result = " + res.ToString());

, Если монитор уже включен, это изменяет разрешение успешно. Но если монитор уже не будет присоединен к рабочему столу, то это не активирует его. У кого-либо есть пример кода, который работает?

1
ответ дан 30 November 2019 в 04:16
поделиться

Если у вас Windows 7, просто запустите процесс:

    private static Process DisplayChanger = new Process
    {
        StartInfo =
        {
            CreateNoWindow = true,
            WindowStyle = ProcessWindowStyle.Hidden,
            FileName = "DisplaySwitch.exe",
            Arguments = "/extend"
        }
    };

затем DisplayChanger.Start ();

11
ответ дан 30 November 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: