我就先用下面的代碼主監視器的亮度:WINAPI C++試圖讓主顯示器的亮度
POINT monitorPoint = { 0, 0 };
HANDLE monitor = MonitorFromPoint(monitorPoint, MONITOR_DEFAULTTOPRIMARY);
DWORD minb, maxb, currb;
if (GetMonitorBrightness(monitor, &minb, &currb, &maxb) == FALSE) {
std::cout << GetLastError() << std::endl;
}
但失敗並GetLastError()
回報87
這意味着Invalid Parameter
。
編輯:我設法解決這個使用EnumDisplayMonitors()
和GetPhysicalMonitorsFromHMONITOR()
這樣的:
std::vector<HANDLE> pMonitors;
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) {
DWORD npm;
GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &npm);
PHYSICAL_MONITOR *pPhysicalMonitorArray = new PHYSICAL_MONITOR[npm];
GetPhysicalMonitorsFromHMONITOR(hMonitor, npm, pPhysicalMonitorArray);
for (unsigned int j = 0; j < npm; ++j) {
pMonitors.push_back(pPhysicalMonitorArray[j].hPhysicalMonitor);
}
delete pPhysicalMonitorArray;
return TRUE;
}
// and later inside main simply:
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, NULL);
// and when I need to change the brightness:
for (unsigned int i = 0; i < pMonitors.size(); ++i) {
SetMonitorBrightness(pMonitors.at(i), newValue);
}
現在我遇到了2點新的問題:
1)從EnumDisplayMonitors()
我得到2監控處理,因爲我有2臺監視器。問題是隻有我的主要作品。每當我嘗試這樣的東西與輔助監視器我得到這個錯誤:
0xC0262582: ERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA
2)使用SetMonitorBrightness()
一段時間它停止用於主顯示器的工作,甚至後,我得到了以下錯誤:
0xC026258D
你驗證'monitor'不是'NULL'或'INVALID_HANDLE_VALUE'? – selbie
您是否調用GetMonitorCapabilities來確認MC_CAPS_BRIGHTNESS標誌是否可用? – selbie
'MonitorFromPoint()'返回一個'HMONITOR',而不是'HANDLE'。如果您使用「STRICT」啓用編譯,則您的代碼將無法編譯。 –