Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.136.26.20] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
В программе определяю адаптер и монитор:
#include <string> #include <iostream> #include <Windows.h> using namespace std; void GetVideoInfo() { setlocale(LC_ALL, ""); DISPLAY_DEVICE sDispDev = {0}; sDispDev.cb = sizeof(DISPLAY_DEVICE); if(EnumDisplayDevices(NULL, 0, &sDispDev, 0)) { cout << "Адаптер: " << sDispDev.DeviceString << endl; } else { cout << "Не удалось найти информацию об адаптере!" << endl; system("\npause"); exit(EXIT_FAILURE); } if(EnumDisplayDevices(sDispDev.DeviceName, 0, &sDispDev, 0)) { cout << sDispDev.DeviceString << endl; } else { cout << "Не удалось найти информацию о дисплее!" << endl; system("\npause"); exit(EXIT_FAILURE); } } int main() { GetVideoInfo(); system("\npause"); } Прикреплённый файлCppStudyCons.zip (2,07 Кбайт, скачиваний: 99) |
Сообщ.
#2
,
|
|
|
Читай описание функции: https://msdn.microsoft.com/ru-ru/library/wi...9(v=vs.85).aspx или на русском: http://www.vsokovikov.narod.ru/New_MSDN_AP...playdevices.htm
Цитата Чтобы получить информацию об адаптере дисплея, вызовите EnumDisplayDevices с параметром lpDevice, установленным в ПУСТО (NULL). Например, DISPLAY_DEVICE.DeviceString содержит имя адаптера. Чтобы получить информацию об экранном мониторе, сначала вызовите функцию EnumDisplayDevices с параметром lpDevice, установленным в ПУСТО (NULL). Затем вызовите EnumDisplayDevices с параметром lpDevice установленным в DISPLAY_DEVICE.DeviceName от первого вызова EnumDisplayDevices и с параметром iDevNum установленным в нуль . Тогда DISPLAY_DEVICE.DeviceString - это название монитора. Вот твой исправленный, рабочий пример: #include <string> #include <iostream> #include <Windows.h> using namespace std; void GetVideoInfo() { setlocale(LC_ALL, ""); DISPLAY_DEVICE sDispDev = { 0 }; sDispDev.cb = sizeof(DISPLAY_DEVICE); if (EnumDisplayDevices(NULL, 0, &sDispDev, 0)) { cout << "Адаптер: " << sDispDev.DeviceString << endl; } else { cout << "Не удалось найти информацию об адаптере!" << endl; system("\npause"); exit(EXIT_FAILURE); } if (EnumDisplayDevices(NULL, 0, &sDispDev, 0)) { cout << sDispDev.DeviceString << endl; } std::wstring devName = sDispDev.DeviceName; if (EnumDisplayDevices(devName.c_str(), 0, &sDispDev, 0)) { cout << sDispDev.DeviceName << endl; } else { cout << "Не удалось найти информацию о дисплее!" << endl; system("\npause"); } } int main() { GetVideoInfo(); system("\npause"); } Добавлено Аа, к слову я там просмотрел первый вызов этой функции у тебя. Ну кароч ты понял в чем ошибка была думаю. |
Сообщ.
#3
,
|
|
|
В EnumDisplayDevices нужно передавать индекс устройства, информацию о котором ты хочешь получить. Попробуй пробежаться по всем девайсам. Как-то так
DISPLAY_DEVICE dev1 = {0}; dev1.cb = sizeof(DISPLAY_DEVICE); for (int i = 0; EnumDisplayDevices(NULL, i, &dev1, 0); ++i) { LOG_DEBUG << i << dev1.DeviceName; DISPLAY_DEVICE dev2 = {0}; dev2.cb = sizeof(DISPLAY_DEVICE); for (int j = 0; EnumDisplayDevices(dev1.DeviceName, j, &dev2, 0); ++j) { LOG_DEBUG << i << j << dev2.DeviceName; } } |
Сообщ.
#4
,
|
|
|
Олег МСпасибо большое за ответ. Все получилось. Только я не понял, что такое LOG_DEBUG? Из-за незнания я использовал cout.
|
Сообщ.
#5
,
|
|
|
M Не забываем про использование функции "Вопрос решён!" |
Сообщ.
#6
,
|
|
|
Цитата tuchin @ Только я не понял, что такое LOG_DEBUG? Такая же фигня... Что за LOG_DEBUG - ума не приложить. Считай это просто аналогом std::cout, но у него наверное это макрос, который выводит результат выполнения программы в файл. |
Сообщ.
#7
,
|
|
|
Цитата KILLER @ Что за LOG_DEBUG - ума не приложить. Считай это просто аналогом std::cout, но у него наверное это макрос, который выводит результат выполнения программы в файл. Не обязательно в файл, не обязательно только в файл. Любой вменяемый логгер можно при необходимости настроить на серию таргетов: начиная от тривиального файла и заканчивая trace-окошком в любимой IDE. |
Сообщ.
#8
,
|
|
|
Цитата B.V. @ Только я не понял, что такое LOG_DEBUG? Из-за незнания я использовал cout Это мои макросы. Забыл заменить на cout, когда выкладывал. |
Сообщ.
#9
,
|
|
|
Попробовал теперь изменить частоту дисплея:
void GetDisplayFrequency() { HDC hdcScreen = GetDC(NULL); cout << "Параметр: " << GetDeviceCaps(hdcScreen, VREFRESH) << endl; } void SetDisplayFrequency() { DEVMODE dm; memset(&dm, 0, sizeof(DEVMODE)); dm.dmSize = sizeof(DEVMODE); dm.dmDisplayFrequency = 75; dm.dmFields = dm.dmDisplayFrequency; if(DISP_CHANGE_SUCCESSFUL != ChangeDisplaySettings(&dm, 0)) { cout << "Не удалось изменить кадровую частоту!" << endl; } } int main() { setlocale(LC_ALL, ""); GetDisplayFrequency(); SetDisplayFrequency(); GetDisplayFrequency(); system("\npause"); } |
Сообщ.
#10
,
|
|
|
Посмотри, какое значение возвращает ChangeDisplaySettings
Добавлено Там много чего может быть |
Сообщ.
#11
,
|
|
|
Цитата tuchin @ Частота 60 Гц, пытаюсь изменить на 75 Гц. Частота не изменяется. Что я делаю неправильно? Монитор то поддерживает 75гц? |
Сообщ.
#12
,
|
|
|
Цитата tuchin @ Частота 60 Гц, пытаюсь изменить на 75 Гц. Частота не изменяется. Что я делаю неправильно? Какой монитор? Какое разрешение экрана? |
Сообщ.
#13
,
|
|
|
1. ChangeDisplaySettings возвращает 0 (DISP_CHANGE_SUCCESSFUL)
2. Монитор и адаптер поддерживает 75 Гц, при выборе определенного режима с помощью Панель управления-Экран-Настройка разрешения экрана-Дополнительные параметры-Список всех режимов выбранный режим устанавливается нормально, в том числе и режим с 75 Гц. Может быть не устанавливается потому, что я не задаю какой-то нужный параметр dm, например dm.dmDeviceName? |
Сообщ.
#14
,
|
|
|
Там еще есть ChangeDisplaySettingsEx, попробуй через неё.Ну и поиграться с dwflags
|
Сообщ.
#15
,
|
|
|
А какие функции позволяют определить и изменить яркость экрана? Вроде бы этот вопрос подходит к этой теме.
|