如何获取笔记本显示屏亮度?WinAPI调用遇I2C总线错误
笔记本显示屏亮度获取问题
我目前使用以下代码尝试获取显示屏亮度:
#include <iostream> #include <Windows.h> #include <physicalmonitorenumerationapi.h> #include <highlevelmonitorconfigurationapi.h> int main() { HMONITOR monitor = MonitorFromWindow(NULL, MONITOR_DEFAULTTONEAREST); DWORD numPhysicalMonitors; if (!GetNumberOfPhysicalMonitorsFromHMONITOR(monitor, &numPhysicalMonitors)) { std::cerr << "Failed to get the number of physical monitors.\n"; return 1; } PHYSICAL_MONITOR* physicalMonitors = new PHYSICAL_MONITOR[numPhysicalMonitors]; if (!GetPhysicalMonitorsFromHMONITOR(monitor, numPhysicalMonitors, physicalMonitors)) { std::cerr << "Failed to get physical monitors.\n"; delete[] physicalMonitors; return 1; } for (DWORD i = 0; i < numPhysicalMonitors; i++) { DWORD minimumBrightness, currentBrightness, maximumBrightness; if (!GetMonitorBrightness(physicalMonitors[i].hPhysicalMonitor, &minimumBrightness, ¤tBrightness, &maximumBrightness)) { std::cerr << "Failed to get monitor brightness.\n"; delete[] physicalMonitors; return 1; } std::cout << "Monitor " << i + 1 << ":\n" << "Minimum Brightness: " << minimumBrightness << "\n" << "Current Brightness: " << currentBrightness << "\n" << "Maximum Brightness: " << maximumBrightness << "\n"; } delete[] physicalMonitors; return 0; }
我对WinAPI完全不了解,这段代码是通过在微软文档网站搜索“Brightness”并跳转至相关函数后拼凑而成的。
设备与系统信息
- 联想笔记本,搭载AMD芯片、NVIDIA独立显卡
- 系统版本:Windows 11
- 显示模式:曾设置为“仅NVIDIA GPU”,切换回Optimus模式问题依旧
遇到的问题
- 代码无法正常调用亮度获取功能,错误信息翻译为“向I2C总线上的设备传输数据时发生错误”
- “仅NVIDIA GPU”模式下系统亮度调节栏呈灰色,Optimus模式下显示正常;但两种模式下都能通过Fn+F5/6功能键调节显示屏亮度
编译环境
- Visual Studio 2022社区版,采用C++最新标准、x64平台Debug配置
- 已链接user32.lib、gdi32.lib、dxva2.lib库,Windows SDK版本为10.0
希望能获取相关解决信息或WinAPI相关文档内容,感谢帮助。
内容的提问来源于stack exchange,提问作者PhanLong
相关产品推荐
相关产品推荐

