!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!!

作者:mohist

---- 已经更正文章中错误的地方, 时间: 10/10/2020---------

自己封装了一个类,方便以后使用。

自己是在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; LPPHYSICAL_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 &param = _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 &param = _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_DEFAULTTOPRIMARY); _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;
}
}
}
}

  

--------------- 完结---------------

附 代码图片:

vc++ 调用winapi调节屏幕亮度的更多相关文章

  1. vc++ 调用winapi调节屏幕亮度(增加win7代码demo)

    1.关于 代码是通过测试的,测试环境: win7 + MFC 为什么要发在这里? 区别于上一篇随笔. MD排版更顺眼 demo 会放到 这里 更正了上一篇随笔中的代码错误 2.头文件 #include ...

  2. Android开发调节屏幕亮度

    在播放器,我们经常看到这样的设计,即,在用户的特定部分将能够滑动屏幕向上或向下调整屏幕的亮度,上下滑动的某一部分将能够调整播放音量.并以滑动的进程可以进行调整,以玩. 如今,我不得不说一下亮度调节. ...

  3. 联想Y450在Ubuntu下调节屏幕亮度

    今天觉得ubuntu下编程时屏幕太亮,上网查了下怎样设置屏幕亮度,按住Fn 的同时调节,结果木有反应啊,杯催.... 继续搜索,最终解决了, happy... 1. 设置屏幕亮度初始值,解决reboo ...

  4. android调节屏幕亮度

    一:只改变当前程序android屏幕亮度(1)方法:lp.screenBrightness 取值 0.0 -- 1.0 ※设定值(float)的范围,默认小于 0(系统设定).0.0(暗)-1.0(亮 ...

  5. [置顶] C# WINCE调节屏幕亮度

    在wince里面保存屏幕亮度的值保存在注册表HKEY_CURRENT_USER\ControlPanel\\Backlight\Brightness里面,值的范围是0-100,所以要改变屏幕的亮度,只 ...

  6. ArchLinux 调节屏幕亮度和音量大小

    我使用的是dwm,所以这种琐碎小事还要我们亲自动手, 以后考虑做个脚本,把声音调节.屏幕亮度什么的统统塞进去 屏幕亮度 # 查看亮度最大值 cat /sys/class/backlight/intel ...

  7. manjaro 手动调节屏幕亮度

    1 问题描述 manjaro版本20.0,桌面XFCE,设置之类的地方没有屏幕亮度调节的功能. 2 解决方案 解决方案来自arch wiki. 亮度由ACPI内核模块控制,这个模块的接口在以下位置: ...

  8. ios 通过代码调节屏幕亮度

    方法: [[UIScreen mainScreen] setBrightness: value]; value:value就是屏幕的亮度值  这个值介于0和1之间 另外 这个方法  会即时刷新  无需 ...

  9. Ubuntu调节屏幕亮度

    下面的方式支持双屏,最多支持四个屏幕调节亮度. sudo add-apt-repository ppa:apandada1/brightness-controller sudo apt-get upd ...

随机推荐

  1. DirectX12 3D 游戏开发与实战第九章内容(上)

    仅供个人学习使用,请勿转载. 9.纹理贴图 学习目标: 学习如何将局部纹理映射到网格三角形上 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次纹理贴图 ...

  2. pcm-pcie 解析

    简介 pcm 全称为 Performance Counter Monitor,该项目是针对 intel 平台处理器的资源利用率进行监控的工具.在现代 Intel 处理器已经提供了监视处理器内部性能事件 ...

  3. 在R语言中使用Stringr进行字符串操作

    今天来学习下R中字符串处理操作,主要是stringr包中的字符串处理函数的用法. 先导入stringr包,library(stringr),require(stringr),或者stringr::函数 ...

  4. ZAQI

    mysql> CREATE TABLE emploee ( -> name CHAR(64) NOT NULL, -> email CHAR(64), -> password ...

  5. .net与java建立WebService再互相调用

    A: .net建立WebService,在java中调用. 1.在vs中新建web 简单修改一下Service.cs的[WebMethod]代码: using System; using System ...

  6. 我好像发现了一个Go的Bug?

    从一次重构说起 这事儿还得从一次重构优化说起. 最近在重构一个路由功能,由于路由比较复杂,需求变化也多,于是想通过责任链模式来重构,刚好这段时间也在 Sentinel-Go 中看到相关源码. 用责任链 ...

  7. day20 系统优化

    day20 系统优化 yum源的优化 yum源的优化: 自建yum仓库 使用一个较为稳定的仓库 # 安装华为的Base源 或者使用清华的源也可以 wget -O /etc/yum.repos.d/Ce ...

  8. 转 序列化Serializable和Parcelable的区别详解

    什么是序列化,为什么要进行序列化 答:对象要进行传输(如:activity 与activity间 ,网络间 进程间等等).存储到本地就必须进行序列化 . 这种可传输的状态就是序列化. 怎么序列化??两 ...

  9. Spring Boot中注解@ConfigurationProperties

    在Spring Boot中注解@ConfigurationProperties有三种使用场景,而通常情况下我们使用的最多的只是其中的一种场景.本篇文章带大家了解一下三种场景的使用情况. 场景一 使用@ ...

  10. JS21. 使用原生JS封装一个公共的Alert插件(HTML5: Shadow Dom)

    效果预览 Shadow DOM Web components  的一个重要属性是封装--可以将标记结构.样式和行为隐藏起来,并与页面上的其他代码相隔离,保证不同的部分不会混在一起,可使代码更加干净.整 ...