Monday, May 17, 2010

Как программно изменять настройки экрана с помощью .NET и Win32API ?

Часто перед нами стоит задача программно изменять настройки экрана (разрешение и тд). Это можно сделать с помощью Win32API.

1) Функция EnumDisplaySettings()
Получить один из режимов, которые поддерживает устройство.

BOOL EnumDisplaySettings(
LPCTSTR lpszDeviceName, // display device
DWORD iModeNum, // graphics mode
[In, Out] LPDEVMODE lpDevMode // graphics mode settings
);

Параметры:
1.1) lpszDeviceName - название устройства отображение, для которого получаем режимы отображения. Если равно NULL  - используется устройство по-умолчанию. Получить  устройство можно с помощью функции EnumDisplayDevices().
1.2) iModeNum - тип информации, которую мы хотим получить. Значение может быть следующее:
ENUM_CURRENT_SETTINGS = -1
Получить текущий режим отображения.
ENUM_REGISTRY_SETTINGS = -2
Получить текущий режим, установленный в регистрах.
1.3) lpDevMode - параметр типа DEVMODE (описан ниже) в который будет записан результат выполнения.
Данная функция может возвращать только один режим за вызов. Для получения всех режимов придется вызывать ее начиная со значения параметра iModeNum = 0 до тех пор пока функция не вернет False.

Для получения всех активных устройств используем - EnumDisplayDevices().

Для использования даннйо функции необходимо импортировать ее:

[DllImport("User32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern Boolean EnumDisplaySettings(

[param: MarshalAs(UnmanagedType.LPTStr)]
string lpszDeviceName,
[param: MarshalAs(UnmanagedType.U4)]
int iModeNum,
[In, Out]
ref DEVMODE lpDevMode);

Read more: .NET разработка от devlanfear

Posted via email from jasper22's posterous