!!版權聲明:本文為博主原創文章,版權歸原文作者和博客園共有,謝絕任何形式的 轉載!!
作者: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;
}
}
}
}
--------------- 完結---------------
附 代碼圖片:







