首页 > 其他分享 >[AHK2] 亮度控制

[AHK2] 亮度控制

时间:2023-07-26 15:11:18浏览次数:51  
标签:控制 AHK2 curLight cmd 亮度 wmi static TRUE

开始

ahk本身并未提供亮度控制的快捷api,所以需另寻它法。

  • 一种是借助DllCall调用win32函数。
  • 另一种是使用ComObj。
  • 最后是使用Run调用cmd。

我尝试使用DllCall,但并未成功,水平仍不足。

后来在ahk手册找到使用ComObj调用cmd的方法,很好实现。但使用此方式会出现cmd闪屏,实际上使用ahk的run方法更好,不过仍有使用它的理由。
关于使用run调用cmd的方法请看下面‘更常用的方式’。

使用COM对象

前置

  • 封装两个方法,使用com对象执行一条cmd和多条cmd。
class ShellRun {
    static RunWaitOne(command) {
        shell := ComObject("WScript.Shell")
        ; 通过 cmd.exe 执行单条命令
        exec := shell.Exec(A_ComSpec " /C " command)
        ; 读取并返回命令的输出
        return exec.StdOut.ReadAll()
    }

    static RunWaitMany(commands) {
        shell := ComObject("WScript.Shell")
        ; 打开 cmd.exe 禁用命令回显
        exec := shell.Exec(A_ComSpec " /Q /K echo off")
        ; 发送并执行命令, 使用新行分隔
        exec.StdIn.WriteLine(commands "`nexit")  ; 总是在最后退出!
        ; 读取并返回所有命令的输出
        return exec.StdOut.ReadAll()
    }
}

来源:https://wyagd001.github.io/v2/docs/lib/Run.htm

封装亮度相关方法

class MonitorBrightness {
    ; class-desc: 提供屏幕亮度获取及设置方法

    static GetBrightness() {
        fields := ShellRun.RunWaitOne('WMIC /NAMESPACE:\\root\wmi PATH WmiMonitorBrightness WHERE "Active=TRUE" GET /value')
        match := 'CurrentBrightness='
        curLight := SubStr(fields, InStr(fields, match) + StrLen(match), 2)
        return +Trim(curLight, '`n')
    }

    static IncBrightness(val) {
        curLight := MonitorBrightness.GetBrightness()
        ShellRun.RunWaitOne('WMIC /NAMESPACE:\\root\wmi PATH WmiMonitorBrightnessMethods WHERE "Active=TRUE" CALL WmiSetBrightness Brightness=' curLight + val ' Timeout=0')
    }

    static DescBrightness(val) {
        curLight := MonitorBrightness.GetBrightness()
        ShellRun.RunWaitOne('WMIC /NAMESPACE:\\root\wmi PATH WmiMonitorBrightnessMethods WHERE "Active=TRUE" CALL WmiSetBrightness Brightness=' curLight - val ' Timeout=0')
    }
}

热键调用

^Home:: MonitorBrightness.IncBrightness(2)
^End:: MonitorBrightness.DescBrightness(2)

缺点

会出现cmd窗口的闪屏。

更常用的方式

上面的方法可以细腻的调节亮度,但一般只要提供昼夜切换亮度即可。

使用Run方法可以隐藏窗口执行,所以不会有闪屏现象,但无法做到细腻的调节。

设置常量

class Constant {
    ; 屏幕亮度
    static lightness_low := 5
    static lightness_normal := 25
}

热键切换亮度

ScrollLock:: {
    ; desc: 切换昼夜亮度
    static flag_brightness := IsSet(flag_brightness) || false
    if flag_brightness
        Run(A_ComSpec ' /c "WMIC /NAMESPACE:\\root\wmi PATH WmiMonitorBrightnessMethods WHERE "Active=TRUE" CALL WmiSetBrightness Brightness=' Constant.lightness_normal ' Timeout=0"', , 'Hide')
    else
        Run(A_ComSpec ' /c "WMIC /NAMESPACE:\\root\wmi PATH WmiMonitorBrightnessMethods WHERE "Active=TRUE" CALL WmiSetBrightness Brightness=' Constant.lightness_low ' Timeout=0"', , 'Hide')
    flag_brightness := !flag_brightness
}

最后

一般键盘都会提供调节亮度及多媒体的快捷键,可惜更换键盘后我便只剩下音量调节,且需配合fn,使用起来十分不便。百度没找到理想的解决方法,很长一时间是手动调节的,最后还是决定“写个脚本吧……”

靠这个脚本也算解决亮度难题了,尽管不怎么优雅。

标签:控制,AHK2,curLight,cmd,亮度,wmi,static,TRUE
From: https://www.cnblogs.com/refiz/p/17582521.html

相关文章

  • MyBatis-Plus数据权限控制
    平时开发中遇到根据当前用户的角色,只能查看数据权限范围的数据需求。列表实现方案有两种,一是在开发初期就做好判断赛选,但如果这个需求是中途加的,或不希望每个接口都加一遍,就可以方案二加拦截器的方式。在mybatis执行sql前修改语句,限定where范围。当然拦截器生效后是全局性的,如何......
  • [AHK2] 虚拟键盘
    介绍此脚本源自ahk社区的ahk_vl版本,时过境迁,版本更迭,我将此脚本升级到v2版本,对部分内容做简化,并增加了更多功能。不仅于显示按下哪些按键,而可以作为其他脚本的子脚本,形成内置键盘的形式。使用双击托盘图标显示或关闭悬浮键盘shift+LButton移动shift+WhellUp\WhellDown改变......
  • python如何调节CT图像的亮度分辨率
    Python如何调节CT图像的亮度分辨率在医学图像处理中,调节CT图像的亮度分辨率是一个重要的任务,它可以用来增强图像的可视化效果和准确性。Python提供了强大的图像处理库,可以方便地对CT图像进行亮度分辨率调节。本文将介绍如何使用Python和OpenCV库来实现。问题描述假设我们有一张C......
  • >.NET Core|--Quartz.Net|--控制台应用程序
    前言#VisualStudio版本MicrosoftVisualStudioProfessional2022(64位)#Quartz.Net版本Quartz.Net3.6.3#C#语言版本(别小看这个,否则我下面的代码在你那里很可能跑不起来)10.0安装Quartz.Net我是直接通过Nuget包管理器安装的其它安装方式,也可以使用命......
  • 洗衣机语音芯片NV170D,静态电流小于2uA一线MCU串口控制,IO口丰富
    洗衣机加入语音提示功能的主要是为了提高用户体验和方便用户使用。通过语音提示,洗衣机可以告诉用户当前洗涤、漂洗、脱水等不同阶段的进展状态,让用户更好地掌握洗衣机的工作情况,方便用户进行时间安排。此外,语音提示功能对于老年人或视力不好的人来说也非常有用,能够让他们更轻松地使......
  • C# 控制台服务 调用cmd命令 重启重启重启 服务器上的指定windows服务
    先贴核心重启服务命令(没错先停止再开启合并成一句话用&连接)CMD管理员运行,直接输入下面语句进行重启。netstoprabbitmq&netstartrabbitmq完整C#代码:参数ServiceName是配置的重启服务名称(后缀没有.exe,例:RabbitMQ)Process命名空间引用:usingSystem.Diagnostics......
  • 安科瑞智能照明控制系统在医院综合楼中的运用
    摘要:医疗建筑的照明系统功能多、能耗高,为了响应国家“碳达峰、碳中和”目标,需要进行节能降耗。医院综合楼现有照明系统能耗高,且整体的管理控制存在问题,智能照明系统的运用,在一定程度上解决了这些问题。智能照明系统的运用,在保障医院环境的同时,还能够节约电能。因此,文章主要研究医院......
  • NetCore 控制台 上下文 注入 dbcontext
    publicclassProgram{privatestaticTestDBContext_tContext;privatestaticvoidMain(string[]args){Startup();vardd=_tContext.User.Take(1).ToList();//e();}privatestaticvoidStartup()......
  • .net core WebApi 控制器使用特性校验是否已经登录
    实现 ApiAuthorizeAction自定义类:publicclassApiAuthorizeAction:Attribute,IAuthorizationFilter{publicvoidOnAuthorization(AuthorizationFilterContextcontext){if(context==null)return;......
  • Ethernet协议下,触摸屏如何远距离无线控制PLC?
    想要实现触摸屏通过RJ45口无线连接200SMARTPLC,需要准备以下几种设备:●西门子PLC型号:S7-200Smart×2台●触摸屏:威纶通TK8071IP×1台●欧美系PLC无线通讯终端:DTD418MB×3块●主从关系:1主2从●通讯接口:RJ45接口然后将这几种设备分别接线。首先是触摸屏与DTD418MB接线,用一......