vc++ 调用winapi调节屏幕亮度
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!!
作者: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 ¶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_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调节屏幕亮度的更多相关文章
- vc++ 调用winapi调节屏幕亮度(增加win7代码demo)
1.关于 代码是通过测试的,测试环境: win7 + MFC 为什么要发在这里? 区别于上一篇随笔. MD排版更顺眼 demo 会放到 这里 更正了上一篇随笔中的代码错误 2.头文件 #include ...
- Android开发调节屏幕亮度
在播放器,我们经常看到这样的设计,即,在用户的特定部分将能够滑动屏幕向上或向下调整屏幕的亮度,上下滑动的某一部分将能够调整播放音量.并以滑动的进程可以进行调整,以玩. 如今,我不得不说一下亮度调节. ...
- 联想Y450在Ubuntu下调节屏幕亮度
今天觉得ubuntu下编程时屏幕太亮,上网查了下怎样设置屏幕亮度,按住Fn 的同时调节,结果木有反应啊,杯催.... 继续搜索,最终解决了, happy... 1. 设置屏幕亮度初始值,解决reboo ...
- android调节屏幕亮度
一:只改变当前程序android屏幕亮度(1)方法:lp.screenBrightness 取值 0.0 -- 1.0 ※设定值(float)的范围,默认小于 0(系统设定).0.0(暗)-1.0(亮 ...
- [置顶] C# WINCE调节屏幕亮度
在wince里面保存屏幕亮度的值保存在注册表HKEY_CURRENT_USER\ControlPanel\\Backlight\Brightness里面,值的范围是0-100,所以要改变屏幕的亮度,只 ...
- ArchLinux 调节屏幕亮度和音量大小
我使用的是dwm,所以这种琐碎小事还要我们亲自动手, 以后考虑做个脚本,把声音调节.屏幕亮度什么的统统塞进去 屏幕亮度 # 查看亮度最大值 cat /sys/class/backlight/intel ...
- manjaro 手动调节屏幕亮度
1 问题描述 manjaro版本20.0,桌面XFCE,设置之类的地方没有屏幕亮度调节的功能. 2 解决方案 解决方案来自arch wiki. 亮度由ACPI内核模块控制,这个模块的接口在以下位置: ...
- ios 通过代码调节屏幕亮度
方法: [[UIScreen mainScreen] setBrightness: value]; value:value就是屏幕的亮度值 这个值介于0和1之间 另外 这个方法 会即时刷新 无需 ...
- Ubuntu调节屏幕亮度
下面的方式支持双屏,最多支持四个屏幕调节亮度. sudo add-apt-repository ppa:apandada1/brightness-controller sudo apt-get upd ...
随机推荐
- Parallel NetCDF 简介
Parallel NetCDF API 所有C接口前加ncmpi前缀,Fortran接口前加nfmpi前缀 函数返回整数 NetCDF 状态变量 1. Variable and Parameter T ...
- 【蛋白质基因组】Proteogenomics方法介绍及分析思路
概念 利用蛋白质组学数据,结合基因组数据(DNA).转录组数据(RNA)来研究基因组注释问题,被称为蛋白质基因组学."蛋白质基因组学"一词由Jaffe 等于2004 年首次提出,作 ...
- 技术管理进阶——Leader的模型、手段及思维
这里可以添加关注交流一下嘛-- 本文更多的是个人认知,有不足请批评. Case 在之前一次年底考评的时候,有一位leader将一个案例同时用到了自己和下属身上,老板发出了责问: 这个项目到底你是负责 ...
- 在windows 10家庭版上安装docker的步骤
本人之前写Redis书和Spring Cloud Alibaba书时,发现一些分布式组件更适合安装在linux环境,而在搭建Redis等集群时,更需要linux环境. 本人日常练习代码和写书所用的机器 ...
- gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法
1. Right click on the project and go to "Properties" //鼠标右键点击项目,然后选中Properties 2. Select ...
- vue中vuex的五个属性和基本用法
VueX 是一个专门为 Vue.js 应用设计的状态管理构架,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data ). Vuex有五个核心概念: state, ge ...
- MFC入门示例之单选框、复选框
设置默认选中一个单选按钮,OnInitDialog()函数中添加: CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO2); 按钮事件处理 1 voi ...
- bugku 杂项 流量分析(cnss)
bugku 杂项 流量分析(cnss) 此题较为简单 wireshark 追踪第一行tcp流信息 得到如下 GET /stat.htm?id=2724999&r=http%3A%2F%2Fsp ...
- SOUI3界面编辑器使用说明
SOUI一直没有官方的界面编辑器,关键是我自己一直坚持手写界面更好控制. 大概是2年前,网友"指尖"开发了一个SOUI2的编辑器,功能非常多,特点是可以拖动控件来实现可视化布局. ...
- Reids安全加固
目录 一.简介 二.加固方案 一.简介 Redis 因配置不当存在未授权访问漏洞,可以被攻击者恶意利用. 在特定条件下,如果Redis以root身份运行,黑客可以给root账号写入SSH公钥文件,直接 ...