vc++ 调用winapi调节屏幕亮度(增加win7代码demo)
1.关于
2.头文件
#include <physicalmonitorenumerationapi.h>
#include <highlevelmonitorconfigurationapi.h>
3.lib库文件
#pragma comment(lib, "Dxva2.lib")
4.类头文件
#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;
};
5.类源文件
#include "stdafx.h"
#include "pm_monitor_brightness.h"
#include <winuser.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;
}
}
else
{
_is_init_success = false;
}
}
}
6.调用
- 6.1 亮度+
_ctrl_brightness.increase(10);
- 6.2 亮度-
_ctrl_brightness.decrease(10);
7.更正后,编译结果

vc++ 调用winapi调节屏幕亮度(增加win7代码demo)的更多相关文章
- vc++ 调用winapi调节屏幕亮度
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist ---- 已经更正文章中错误的地方, 时间: 10/10/2020--------- 自己封 ...
- 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 13.04 无法调节屏幕亮度的问题
13.04与12.04大部分步骤是相同的,只是12.04的方法在13.04中失败了,所以还是有必要说明一下.我到电脑是宏碁AS4750G,硬盘安装系统后电源亮度无法调节. 解决方法如下: 终端输入代码 ...
随机推荐
- 【GS文献】基因组选择在植物分子育种应用的最新综述(2020)
目录 1. 简介 2. BLUP类模型 3. Bayesian类模型 4. 机器学习 5. GWAS辅助的GS 6. 杂交育种 7. 多性状 8. 长期选择 9. 预测准确性评估 10. GS到植物育 ...
- 详细解析Thinkphp5.1源码执行入口文件index.php运行过程
详细解析Thinkphp5.1源码执行入口文件index.php运行过程 运行了public目录下的index.php文件后,tp的运行整个运行过程的解析 入口文件index.php代码如下: < ...
- R shinydashboard ——1. 基本用法
shiny和shinydashboard使用虽然简单,但控件众多,需及时总结归纳. install.packages("shinydashboard") shinydashboar ...
- 17.Power of Four-Leetcode
#define IMIN numeric_limits<int>::min() #define IMAX numeric_limits<int>::max() class So ...
- Linux信号1
信号(signal)是一种软中断,他提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式.在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某进程发生了什么事件,还可以给 ...
- Gradle—Android配置详解
参考[1]彻底弄明白Gradle相关配置 [2]Android Studio gradle配置详解
- Git的使用-一个分支完全替换另一个分支
之前公司git分支混乱,今天花时间整理了一下,在合并分支的时候遇到一个问题: 一个很久没有拉取远程代码的分支与master分支合并时,出现冲突之外,还会丢失文件,很头疼,然后找到了下面的方法,可以直接 ...
- Win7部署Yapi
1.安装node 下载地址:https://nodejs.org/zh-cn/download/ (win7要下载v12.16之前的版本) 安装目录在D:\nodejs,配置地址(文件目录不能有特殊符 ...
- 转Android Canvas和Paint基本使用
Android Canvas和Paint基本使用 这篇文章主要介绍下画笔Paint和画布Canvas的基本使用 1.Paint 创建对象Paint mPaint = new Paint(); 常 ...
- What all is inherited from parent class in C++?
派生类可以从基类中继承: (1)基类中定义的每个数据成员(尽管这些数据成员在派生类中不一定可以被访问): (2)基类中的每个普通成员函数(尽管这些成员函数在派生类中不一定可以被访问): (3)The ...