Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.
Как добиться от монитора его характеристик: разрешения, тактовой частоты и пр.? А поменять? Легко!
Есть несколько WinAPI функций. Фактически, приведу только список функций, приводить подробности глупо – поскольку все они есть в MSDN. В том же MSDN в конце каждого описания функции есть ссылки на близкие по назначению функции.

Как получить разрешение

GetDeviceCaps

int GetDeviceCaps(
HDC hdc, // хэндл контекста устройства
int nIndex // “индекс возможностей” – индекс запрашиваемой характеристики
);



Вернёт для вашего HDC всё что попросите. Попросить можно nIndex. Полный список возможных вопросов Вы найдёте в MSDN. Если вам нужно разрешение монитора (в пикселях), то действовать можно вот так:


HDC hdcScreen = GetWindowDC(GetDesktopWindow());
int nXRes = GetDeviceCaps(hdcScreen, HORZRES); //взять разрешение по горизонтали
int nYRes = GetDeviceCaps(hdcScreen, VERTRES); //взять разрешение по вертикали



Обращу внимание, что эта функция может применяться не только к монитору, но и ко всему, что может иметь HDC, например, к принтеру. Кстати, с помощью nIndex = TECHNOLOGY можно получить по контексту устройства информацию о том, с чем же вы на самом деле имеете дело. Тактовую частоту (в Гц) обновления можно получить с помощью VREFRESH (правда, работать это будет лишь в Windows NT/2000).

Ещё одна интересная функция, в сторону которой стоит посмотреть: GetSystemMetrics




Перед тем как поменять настройки монитора, необходимо заполнить структуру DEVMODE. Это можно сделать с помощью функции EnumDisplaySettings

BOOL EnumDisplaySettings(LPCTSTR lpszDeviceName,
DWORD iModeNum,
LPDEVMODE lpDevMode);


Эта функция перечисляет все возможные характеристики дисплея. Первый параметр, lpszDeviceName, обозначает дисплей, для которого вы хотите перечислить характеристики. В общем то вы можете передать и NULL, но у MS есть проблемы при работе с много мониторными системами, особенно если у них отличающиеся характеристики. В этом случае вы должны передать "\\.\DisplayX", где Х может принять значение 1, 2, или 3.
Каждый монитор имеет свою коллекцию настроек, которые может поддерживать (каждый, кто копался в настройках монитора, их видел). iModeNum показывает номер "настройки" (пресета) в коллекции, который Вы хотите получить (первый пресета имеет №0). Возвращаемые значения настроек вы найдёте в параметре DEVMODE. DEVMODE имеет множество членов, но только 5 из них относятся к дисплеям.

Поменять разрешение монитора можно функцией ChangeDisplaySettings

Вот её прототип:

LONG ChangeDisplaySettings(
LPDEVMODE lpDevMode, // графический режим
DWORD dwflags // опция графического режима
);



Если вам необходимо, что бы после завершения работы программы настройки монитора вернулись в исходное положение, ни в коем случае не устанавливайте флаг dwflags CDS_UPDATEREGISTRY, который разрешает прописывать обновлённые настройки монитора в реестр.


Если Вам необходимо поменять характеристики иного (не дисплея) устройсва, то в руки вам попадает функция ChangeDisplaySettingsEx:

LONG ChangeDisplaySettingsEx(
LPCTSTR lpszDeviceName, // name of display device
LPDEVMODE lpDevMode, // graphics mode
HWND hwnd, // not used; must be NULL
DWORD dwflags, // graphics mode options
LPVOID lParam // video parameters (or NULL)
);



Подробно описывать её не буду – если Вы добрались до программирования плоттеров и т.п. – то скорее всего Вы уже не читаете ФАК, а, возможно, пишете его.



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS