!!版權聲明:本文為博主原創文章,版權歸原文作者和博客園共有,謝絕任何形式的 轉載!!
作者:mohist
自己封裝了一個類,方便以后使用。
自己是在win7上完成的測試,發現可以。博文是在Mac上寫的,代碼可能存在錯誤,請見諒,我會放上圖片。
1、包含頭文件
#include <physicalmonitorenumerationapi.h> #include <highlevelmonitorconfigurationapi.h>
2、包含系統 lib 庫文件
#pragma comment(lib, "Dxva2.lib")
3、 .h
#pragma once // #include <physicalmonitorenumerationapi.h> #include <highlevelmonitorconfigurationapi.h> class pm_monitor_brightness { public: pm_monitor_brightness(void) virtual ~pm_monitor_brightness(); /* @brief: 增加亮度 @param:const unsigned int offset - 步長,最大為100, 若超過100,將亮度設置為最大 @return: int 0 - 成功 1 - 失敗,設置失敗 */ int increase(const unsigned int offset = 10); /* @brief: 降低亮度 @param:const unsigned int offset - 步長,最大為100, 若超過100,將亮度設置為低 @return: int 0 - 成功 1 - 失敗,設置失敗 */ int decrease(const unsigned int offset = 10); private: // 設置屏幕亮度 void set_monitor_brightness(const unsigned int bright); void init(); private: enum { max_offset_100 = 100, }; struct pm_brightness_val { // 當前亮度值 int _cur; // 顯示器最大亮度 int _max; // 顯示器亮度最低值 int _min; void zero() { memset(this, 0, sizeof(pm_brightness_val)); } pm_brightness_val() { zero(); } }; // BOOL _is_init_success; HANDLE _handle_cur_monitor; HMONITOR _monitor; DWORD _physical_monitor_number; LPHYSICAL_MONITOR _physical_monitor; // pm_brightness_val _brightness_val; };
4、 .cpp
#include "pm_monitor_brightness.h" pm_monitor_brightness::pm_monitor_brightness() : _is_init_success(FALSE) , _handle_cur_monitor(NULL) , _monitor(NULL) , _physical_monitor_number(0) , _physical_monitor(NULL) { init(); } pm_monitor_brightness::~pm_monitor_brightness() { if (NULL != _physical_monitor) DestroyPhysicalMonitors(_physical_monitor_number, _physical_monitor); if (NULL != _physical_monitor) { free(_physical_monitor); _physical_monitor = NULL; } } int pm_monitor_brightness::increase(const unsigned int offset/*=10*/) { pm_brightness_val ¶m = _brightness_val; // 沒有初始化成功 if (!_is_init_success) return 1; // 已經打到最大值 if (param._cur == param._max) return 0; param._cur = (max_offset_100 == offset) ? param._max : (param._cur + offset); if (param._cur > param._max) param._cur = param._max; set_monitor_brightness(param._cur); return 0; } int pm_monitor_brightness::decrease(const unsigned int offset/* = 10 */) { pm_brightness_val ¶m = _brightness_val; // 沒有初始化成功 if (!_is_init_success) return 1; // 已經打到最大值 if (param._cur == param._min) return 0; param._cur = (max_offset_100 == offset) ? param._max : (param._cur - offset); if (param._cur < param._min) param._cur = param._min; set_monitor_brightness(param._cur); return 0; } // 設置屏幕亮度 void pm_monitor_brightness::set_monitor_brightness(const unsigned int bright) { if (_is_init_success) SetMonitorBrightness(_handle_cur_monitor, bright); } void pm_monitor_brightness:: init() { _monitor = MonitorFromWindow(NULL, MONITOR_DEFAULTOPRIMARY); _is_init_success = GetNumberOfPhysicalMonitorsFromHMONITOR(_monitor, &_physical_monitor_number); if (_is_init_success) { _physical_monitor = (LPPHYSICAL_MONITOR)malloc(_physical_monitor_number * sizeof(LPPHYSICAL_MONITOR)); if (NULL != _physical_monitor) { _is_init_success = GetPhysicalMonitorsFromHMONITOR(_monitor, _physical_monitor_number, _physical_monitor); if (_is_init_success) { DWORD max_val = 0; DWORD cur_val = 0; DWORD min_val = 0; HANDLE ppp = _physical_monitor[0].hPhysicalMonitor; _is_init_success = GetMonitorBrightness(ppp, &min_val, &cur_val, &max_val); _brightness_val._cur = cur_val; _brightness_val._max = max_val; _brightness_val._min = min_val; _handle_cur_monitor = ppp; } } } }
--------------- 完結---------------
附 代碼圖片: