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 ...
随机推荐
- DTOJ 1561: 草堆摆放
题目描述 FJ买了一些干草堆,他想把这些干草堆分成N堆(1<=N<=100,000)摆成一圈,其中第i堆有B_i数量的干草.不幸的是,负责运货的司机由于没有听清FJ的要求,只记住分成N堆摆 ...
- Oracle-连接多个字段
0.函数concat(A,B)作用:链接字符串 区别: Oracle中:CONCAT()只允许两个参数:(貌似可以内嵌) Mysql中:CONCAT()可以连接多个参数: 1.用||符号进行拼接 例子 ...
- 内存管理malloc 2
malloc可以在函数指针内使用.#include <stdio.h> #include <stdlib.h> char * get_string() { //char s[] ...
- Hadoop入门 概念
Hadoop是分布式系统基础架构,通常指Hadoop生态圈 主要解决 1.海量数据的存储 2.海量数据的分析计算 优势 高可靠性:Hadoop底层维护多个数据副本,即使Hadoop某个计算元素或存储出 ...
- HashMap有几种遍历方法?推荐使用哪种?
本文已收录<面试精选>系列,Gitee 开源地址:https://gitee.com/mydb/interview HashMap 的遍历方法有很多种,不同的 JDK 版本有不同的写法,其 ...
- CentOS7 搭建maven私服Nexus
下载解压 官网https://www.sonatype.com/download-oss-sonatype 下载页面 https://help.sonatype.com/repomanager2/do ...
- 链栈(C++)
链栈,字面意思,就是用链表来实现一个栈的数据结构. 那么,只需将单链表的头节点当作栈顶,尾节点当作栈底.入栈只需要头插,出栈只需头删即可.所以只需要吧单链表稍微阉割一下就可以得到链式栈了.代码如下 / ...
- tomcat 8 内存优化
在Linux环境下设置Tomcat JVM,在/opt/tomcat/bin/catalina.sh文件中找到"# ----- Execute The Requested Command&q ...
- Activiti工作流引擎使用详解(一)
一.IDEA安装activiti插件 在插件库中查找actiBPM,安装该插件,如果找不到该插件,请到插件库中下载该包手动安装,插件地址 http://plugins.jetbrains.com/pl ...
- Webpack学习篇
<深入浅出Webpack>优化篇 01 Webpack 优化可以分为开发优化和输出质量优化两部分,主要要点如下: 优化开发体验,提升开发效率 优化构建速度 优化使用体验 优化输出质量 减少 ...