如何通过PowerShell脚本实现屏幕亮度的增减调节?
用PowerShell调节屏幕亮度的可行方案
由于FN键是键盘硬件层面的组合键,WScript.Shell.SendKeys无法模拟这类非标准按键输入,因此需要借助系统内置工具或Windows API来实现屏幕亮度的调节,以下是几种兼容性较好的方案:
方案1:使用系统内置powercfg命令(推荐)
powercfg是Windows自带的电源配置工具,可直接读取和设置显示器亮度,兼容性覆盖绝大多数Windows设备:
亮度增加脚本
# 识别当前电源模式(AC=插电,DC=电池) $powerMode = if ((Get-CimInstance Win32_Battery).BatteryStatus -eq 2) { "AC" } else { "DC" } $scheme = "SCHEME_CURRENT" $subGroup = "SUB_VIDEO" $setting = "VIDEOBRIGHTNESS" # 获取当前亮度值(0-100) $currentBrightness = (powercfg -get$powerMode`valueindex $scheme $subGroup $setting).Split()[-1] -as [int] # 计算新亮度(每次增加10,限制在0-100范围内) $newBrightness = [math]::Max(0, [math]::Min(100, $currentBrightness + 10)) # 应用新亮度并激活配置 powercfg -set$powerMode`valueindex $scheme $subGroup $setting $newBrightness powercfg -setactive $scheme
亮度减少脚本
只需将上述代码中的$currentBrightness + 10改为$currentBrightness - 10即可。
方案2:调用Windows API调节Gamma曲线
通过修改显示器的Gamma曲线实现亮度调节,适合不支持powercfg亮度设置的设备,但重启后会恢复默认:
Add-Type @" using System; using System.Runtime.InteropServices; public class DisplayBrightness { [DllImport("gdi32.dll")] public static extern bool GetDeviceGammaRamp(IntPtr hdc, ref RAMP lpRamp); [DllImport("gdi32.dll")] public static extern bool SetDeviceGammaRamp(IntPtr hdc, ref RAMP lpRamp); [StructLayout(LayoutKind.Sequential)] public struct RAMP { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public ushort[] Red; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public ushort[] Green; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public ushort[] Blue; } } "@ # 获取当前Gamma参数 $hdc = [System.Drawing.Graphics]::FromHwnd([IntPtr]::Zero).GetHdc() $ramp = New-Object DisplayBrightness+RAMP $ramp.Red = New-Object ushort[] 256 $ramp.Green = New-Object ushort[] 256 $ramp.Blue = New-Object ushort[] 256 [DisplayBrightness]::GetDeviceGammaRamp($hdc, [ref]$ramp) | Out-Null # 调节亮度(1.1=增加10%,0.9=减少10%,范围0.1-1.0) $brightnessMultiplier = 1.1 for ($i = 0; $i -lt 256; $i++) { $newValue = [ushort][math]::Min(65535, [math]::Max(0, $ramp.Red[$i] * $brightnessMultiplier)) $ramp.Red[$i] = $newValue $ramp.Green[$i] = $newValue $ramp.Blue[$i] = $newValue } # 应用新Gamma设置 [DisplayBrightness]::SetDeviceGammaRamp($hdc, [ref]$ramp) | Out-Null $hdc.Dispose()
方案3:WMI硬件接口(仅部分笔记本支持)
部分品牌笔记本(如戴尔、联想)提供了WMI接口直接控制屏幕亮度,需要管理员权限:
亮度增加脚本
# 获取当前亮度(仅支持部分设备) $display = Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBrightness $currentBrightness = $display.CurrentBrightness # 计算新亮度(限制0-100) $newBrightness = [math]::Max(0, [math]::Min(100, $currentBrightness + 10)) # 设置亮度 $brightnessMethods = Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBrightnessMethods $brightnessMethods.WmiSetBrightness(1, $newBrightness)
内容的提问来源于stack exchange,提问作者Oprex Droid
相关产品推荐
相关产品推荐

