Библиотека CX DXVA & quot; Операция не выполнена, поскольку в сообщении DDC / CI указано недопустимое значение в поле команды. & Quot;

Я пытаюсь создать консольное приложение C ++, которое будет автоматически регулировать яркость моего монитора на основе средней яркости пикселей, отображаемых на моем экране. К сожалению, прежде чем я дошел до второй части, у меня возникли проблемы даже с использованием библиотеки DXVA.

Вот мой текущий код (который я взял здесь: Как использовать функции GetMonitorCapabilities и GetMonitorBrightness):

#include "stdafx.h"#include <iostream>

#include <Windows.h>
#include <WinUser.h>
#include <physicalmonitorenumerationapi.h>
#include <highlevelmonitorconfigurationapi.h>
#include <strsafe.h>

std::string GetLastErrorAsString()
{
DWORD errorMessageID = ::GetLastError();
if (errorMessageID == 0)
return std::string();

LPSTR messageBuffer = nullptr;
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);

std::string message(messageBuffer, size);
LocalFree(messageBuffer);

return message;
}

int main()
{
HWND hWnd = GetDesktopWindow();
HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTOPRIMARY);
DWORD cPhysicalMonitors = 0;

BOOL bSuccess = GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &cPhysicalMonitors);
if (!bSuccess) {
std::cout << "An error occured: " << GetLastErrorAsString().c_str() << std::endl;
}
LPPHYSICAL_MONITOR pPhysicalMonitors = (LPPHYSICAL_MONITOR)malloc(cPhysicalMonitors * sizeof(PHYSICAL_MONITOR));

if (bSuccess)
{
if (pPhysicalMonitors != NULL)
{
bSuccess = GetPhysicalMonitorsFromHMONITOR(hMonitor, cPhysicalMonitors, pPhysicalMonitors);

if (!bSuccess) {
std::cout << "An error occured: " << GetLastErrorAsString().c_str() << std::endl;
}

HANDLE hPhysicalMonitor = pPhysicalMonitors[0].hPhysicalMonitor;

DWORD dwMinimumBrightness = 0;
DWORD dwCurrentBrightness = 0;
DWORD dwMaximumBrightness = 0;

DWORD dwMonitorCapabilities = 0;
DWORD dwSupportedColorTemperatures = 0;
bSuccess = GetMonitorCapabilities(hPhysicalMonitor, &dwMonitorCapabilities, &dwSupportedColorTemperatures);

if (bSuccess) {
std::cout << "Capabilities: " << dwMonitorCapabilities << std::endl << "Supported color temperatures: " << dwSupportedColorTemperatures << std::endl;
}
else {
std::cout << "An error occured while getting monitor capabilities: " << GetLastErrorAsString().c_str() << std::endl;
}

bSuccess = GetMonitorBrightness(hPhysicalMonitor, &dwMinimumBrightness, &dwCurrentBrightness, &dwMaximumBrightness);

if (bSuccess) {
std::cout << "Minimum brightness: " << dwMinimumBrightness << std::endl << "Maximum brightness: " << dwMaximumBrightness << std::endl << "Current brightness: " << dwCurrentBrightness << std::endl;
}
else {
std::cout << "An error occured while getting brightness: " << GetLastErrorAsString().c_str() << std::endl;
}

bSuccess = DestroyPhysicalMonitors(cPhysicalMonitors, pPhysicalMonitors);

free(pPhysicalMonitors);
}
}
return 0;
}

Ошибка, которую я получаю для функций яркости / возможностей, заключается в следующем: An operation failed because a DDC/CI message had an invalid value in its command field.

Я часами гуглял, и мне еще предстоит найти какое-то решение для моей проблемы. У меня есть видеокарта AMD, и я использую встроенные драйверы (драйверы Google Lenovo e545 AMD), которые включают версию Catalyst 15.7.1Direct3D 9.14.10.01128и версия драйвера 15.20.1062.1004-150803a1-187674C,

Я прошу прощения за грязный вопрос и отсутствие опыта.

5

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]