You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Windows 11中使用PowerShell调节第二显示器的亮度

如何在Windows 11中使用PowerShell调节第二显示器的亮度

太懂这种离谱的感觉了——Windows 11 Pro居然藏起了副屏亮度调节的入口,确实让人头疼。不过别担心,用PowerShell完全能搞定,下面给你两种实用的方法:

方法一:调用系统API的原生脚本

这个方法直接调用Windows底层的API,不需要额外安装任何模块,兼容性相对较好。你可以直接复制下面的脚本到PowerShell里运行:

Add-Type @"
using System;
using System.Runtime.InteropServices;

public class DisplayBrightness {
    [DllImport("user32.dll")]
    public static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip, MonitorEnumProc lpfnEnum, IntPtr dwData);
    
    [DllImport("dxva2.dll")]
    public static extern bool SetMonitorBrightness(IntPtr hMonitor, uint dwBrightness);
    
    public delegate bool MonitorEnumProc(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData);
    
    [StructLayout(LayoutKind.Sequential)]
    public struct RECT {
        public int left;
        public int top;
        public int right;
        public int bottom;
    }
    
    public static IntPtr GetSecondMonitorHandle() {
        IntPtr secondMonitor = IntPtr.Zero;
        int monitorCount = 0;
        
        EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, (hMonitor, hdcMonitor, ref RECT lprcMonitor, dwData) => {
            monitorCount++;
            if (monitorCount == 2) {
                secondMonitor = hMonitor;
                return false; // 找到第二个显示器后停止枚举
            }
            return true;
        }, IntPtr.Zero);
        
        return secondMonitor;
    }
}
"@

# 获取第二显示器的句柄
$secondMonitor = [DisplayBrightness]::GetSecondMonitorHandle()

if ($secondMonitor -ne [IntPtr]::Zero) {
    # 这里可以修改亮度值,范围是0-100
    $brightnessLevel = 50
    $success = [DisplayBrightness]::SetMonitorBrightness($secondMonitor, $brightnessLevel)
    
    if ($success) {
        Write-Host "第二显示器亮度已设置为 $brightnessLevel%"
    } else {
        Write-Host "设置失败,可能你的显示器不支持通过API调节亮度"
    }
} else {
    Write-Host "未检测到第二显示器"
}

注意事项:

  • 一定要以管理员身份启动PowerShell,否则可能没有权限修改显示器设置;
  • 你可以把$brightnessLevel的值改成0-100之间的任意数字,对应亮度百分比。

方法二:使用CIM实例快速调节

这个方法更简洁,但兼容性稍差,仅适用于部分支持WMI亮度属性的显示器。如果方法一不行,可以试试这个:

# 获取所有已连接的显示器
$monitors = Get-CimInstance -ClassName Win32_DesktopMonitor

if ($monitors.Count -ge 2) {
    # 索引从0开始,第二个显示器对应索引1
    $secondMonitor = $monitors[1]
    # 设置亮度值,范围0-100
    $brightnessLevel = 50
    $secondMonitor | Set-CimInstance -Property @{Brightness = $brightnessLevel}
    Write-Host "第二显示器亮度已设置为 $brightnessLevel%"
} else {
    Write-Host "未检测到第二显示器"
}

补充说明:

如果两种方法都失效,大概率是你的显示器驱动不支持软件调节亮度,这时候可以试试更新显卡驱动,或者直接用显示器自带的物理按钮调节。

备注:内容来源于stack exchange,提问作者not2qubit

火山引擎 最新活动