Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Функции Контекста устройства MSDN
, Что в основном необходимо сделать:
Использование EnumDisplayDevices () вызов API, чтобы перечислить дисплеи в системе и искать тех, которые не имеют
DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
, флаг установил (это будет включать любые устройства зеркального отражения так не, все будут физическими дисплеями.), После того как Вы нашли дисплей, на который необходимо будет заставить допустимый режим отображения изменять его, можно найти это путем называния EnumDisplaySettingsEx () вызовом API - Обычно Вы отобразили бы все доступные режимы и позволили бы пользователю выбирать однако в Вашем случае, он кажется, что это может быть возможно к твердому коду и сохранить Вас дополнительный шаг. Ради соответствования требованиям завтрашнего дня Вашего приложения, хотя я предложил бы иметь это легко изменяемое, не имея необходимость рыть через источник каждый раз, ключ реестра будет очевидным выбором. После того как Вам разобрались, это заполняет структуру дисплея DevMode с информацией о расположении дисплея (установите PelsWidth/Height, Положение, свойства DisplayFrequency и BitsPerPel), затем установите эти флаги в полевом участнике. Наконец назовите ChangeDisplaySettingsEx () с этой структурой настроек и обязательно отправьте сброс и флаги реестра обновления. Это должно быть всем, в чем Вы нуждаетесь, надеетесь, что это помогает,
импорт структуры DISPLAY_DEVICE с помощью импорта функции PInvoke
импорт функции EnumDisplaySettingsEx
и т.д. остальная часть их, функции могут быть найдены с простым поиском по имени.
У меня нет полного ответа здесь, но я почти уверен, что необходимо будет звонить из .NET, чтобы сделать это. Необходимо будет использовать Pinvoke для вызова неуправляемого dll. Большим ресурсом для этого является pinvoke.net.
я сделал быстрый поиск и нашел http://www.pinvoke.net/default.aspx/user32/ChangeDisplaySettings.html , который, вероятно, не является точно, что Вы хотите, но Вы, вероятно, найдете его где-нибудь на pinvoke.net
Я ищу то же решение. Я написал следующий код для вызова 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());
, Если монитор уже включен, это изменяет разрешение успешно. Но если монитор уже не будет присоединен к рабочему столу, то это не активирует его. У кого-либо есть пример кода, который работает?
Если у вас Windows 7, просто запустите процесс:
private static Process DisplayChanger = new Process
{
StartInfo =
{
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "DisplaySwitch.exe",
Arguments = "/extend"
}
};
затем DisplayChanger.Start ();