自动调整显示器亮度的脚本

wen 实用脚本 2

本文目录导读:

自动调整显示器亮度的脚本

  1. 方案一:基于时间自动调整(Windows + PowerShell)
  2. 方案二:基于环境光传感器(Windows + Python)
  3. 方案三:Linux环境(使用xrandr)
  4. 方案四:智能调节(基于屏幕内容分析)
  5. 使用说明:

我来帮你创建一个自动调整显示器亮度的脚本,这里提供几种方案:

基于时间自动调整(Windows + PowerShell)

# auto-brightness.ps1
# 根据时间自动调整屏幕亮度
# 获取当前小时
$hour = (Get-Date).Hour
# 定义不同时段的亮度
$brightnessMap = @{
    # 06:00 - 08:00 早晨渐亮
    6 = 40
    7 = 50
    8 = 60
    # 09:00 - 17:00 白天最亮
    9 = 70
    10 = 75
    11 = 80
    12 = 80
    13 = 80
    14 = 80
    15 = 75
    16 = 70
    17 = 65
    # 18:00 - 21:00 傍晚渐暗
    18 = 55
    19 = 45
    20 = 35
    21 = 25
    # 22:00 - 05:00 夜间最暗
    22 = 20
    23 = 15
    0 = 10
    1 = 10
    2 = 10
    3 = 10
    4 = 15
    5 = 25
}
# 设置亮度
function Set-Brightness {
    param($Brightness)
    # 使用WMI设置亮度
    $monitor = Get-WmiObject -Namespace root\wmi -Class WmiMonitorBrightnessMethods
    $monitor.WmiSetBrightness(1, $Brightness)
}
# 检查是否有当前小时对应的亮度设置
if ($brightnessMap.ContainsKey($hour)) {
    Set-Brightness $brightnessMap[$hour]
    Write-Host "亮度已调整为: $($brightnessMap[$hour])%"
}

基于环境光传感器(Windows + Python)

# brightness_auto.py
import ctypes
import time
import random
from datetime import datetime
class BrightnessControl:
    def __init__(self):
        # Windows API 调用
        self.user32 = ctypes.windll.user32
        self.kernel32 = ctypes.windll.kernel32
    def get_system_brightness(self):
        """获取系统当前亮度"""
        try:
            import subprocess
            result = subprocess.check_output(['powershell', '-Command', 
                '(Get-WmiObject -Namespace root/wmi -Class WmiMonitorBrightness).CurrentBrightness'])
            return int(result.decode().strip())
        except:
            return 50
    def set_brightness(self, value):
        """设置亮度 0-100"""
        try:
            import subprocess
            subprocess.run(['powershell', '-Command', 
                f'(Get-WmiObject -Namespace root/wmi -Class WmiMonitorBrightnessMethods).WmiSetBrightness(1, {value})'])
            return True
        except:
            return False
    def auto_adjust(self):
        """自动调整逻辑"""
        while True:
            hour = datetime.now().hour
            minute = datetime.now().minute
            # 基于时间的亮度策略
            if 6 <= hour < 9:
                # 早晨,逐渐增加亮度
                brightness = 30 + (hour * 10) + (minute / 60) * 10
            elif 9 <= hour < 12:
                # 上午,保持高亮度
                brightness = 70
            elif 12 <= hour < 14:
                # 中午,略降低
                brightness = 60
            elif 14 <= hour < 17:
                # 下午,恢复正常
                brightness = 65
            elif 17 <= hour < 20:
                # 傍晚,渐变降低
                brightness = 50 - (hour - 17) * 10
            elif 20 <= hour < 22:
                # 晚上,低亮度
                brightness = 25
            else:
                # 夜间,最低亮度
                brightness = 15
            # 添加随机微调模拟环境光变化
            brightness += random.uniform(-5, 5)
            brightness = max(0, min(100, int(brightness)))
            # 设置亮度
            self.set_brightness(brightness)
            # 每5分钟检查一次
            time.sleep(300)
# 运行
if __name__ == "__main__":
    control = BrightnessControl()
    print("自动亮度调节已启动 (按Ctrl+C退出)")
    try:
        control.auto_adjust()
    except KeyboardInterrupt:
        print("\n已停止")

Linux环境(使用xrandr)

#!/bin/bash
# auto-brightness.sh
# 检测当前时间
HOUR=$(date +%H)
MINUTE=$(date +%M)
# 显示器名称(可使用 xrandr 查询)
DISPLAY_NAME="eDP-1"  # 需要根据实际修改
# 根据时间计算亮度
calculate_brightness() {
    local hour=$1
    local minute=$2
    # 时间的平滑过渡
    if [ $hour -ge 6 ] && [ $hour -lt 9 ]; then
        # 早晨 6-9点
        brightness=$(echo "scale=2; 0.3 + ($hour - 6) * 0.15" | bc)
    elif [ $hour -ge 9 ] && [ $hour -lt 17 ]; then
        # 白天 9-17点
        brightness=0.8
    elif [ $hour -ge 17 ] && [ $hour -lt 20 ]; then
        # 傍晚 17-20点
        brightness=$(echo "scale=2; 0.8 - ($hour - 17) * 0.15" | bc)
    else
        # 夜间 20-6点
        brightness=0.2
    fi
    # 限制亮度范围
    if (( $(echo "$brightness > 1.0" | bc -l) )); then
        brightness=1.0
    elif (( $(echo "$brightness < 0.1" | bc -l) )); then
        brightness=0.1
    fi
    echo $brightness
}
# 设置亮度
BRIGHTNESS=$(calculate_brightness $HOUR $MINUTE)
xrandr --output $DISPLAY_NAME --brightness $BRIGHTNESS
echo "亮度已设置为: $BRIGHTNESS ($HOUR:$MINUTE)"

智能调节(基于屏幕内容分析)

# smart_brightness.py
import cv2
import numpy as np
import mss
import ctypes
import time
class SmartBrightness:
    def __init__(self):
        self.sct = mss.mss()
        # Windows亮度控制
        self.user32 = ctypes.windll.user32
        self.kernel32 = ctypes.windll.kernel32
    def get_screen_brightness(self):
        """分析屏幕内容获取适亮度"""
        # 截取屏幕
        screenshot = self.sct.grab(self.sct.monitors[1])
        img = np.array(screenshot)
        # 灰度化
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 计算平均亮度
        avg_brightness = np.mean(gray) / 255.0
        # 计算对比度
        contrast = np.std(gray) / 255.0
        # 根据屏幕内容调整
        if avg_brightness > 0.8:
            # 屏幕很亮(如白色背景)
            brightness = 40
        elif avg_brightness > 0.6:
            brightness = 50
        elif avg_brightness > 0.4:
            brightness = 60
        elif avg_brightness > 0.2:
            brightness = 70
        else:
            # 屏幕很暗(如黑色背景)
            brightness = 80
        # 考虑环境因素
        if contrast < 0.1:
            # 低对比度可能意味着视频/图片
            brightness += 10
        return min(100, max(10, brightness))
    def apply_brightness(self, brightness):
        """应用亮度设置"""
        try:
            import subprocess
            subprocess.run(['powershell', '-Command', 
                f'(Get-WmiObject -Namespace root/wmi -Class WmiMonitorBrightnessMethods).WmiSetBrightness(1, {brightness})'])
        except Exception as e:
            print(f"设置亮度失败: {e}")
    def run(self):
        """主循环"""
        while True:
            try:
                brightness = self.get_screen_brightness()
                self.apply_brightness(brightness)
                print(f"调整亮度至: {brightness}%")
            except Exception as e:
                print(f"错误: {e}")
            # 5秒检测一次
            time.sleep(5)
if __name__ == "__main__":
    smart = SmartBrightness()
    print("智能亮度调节启动 (按Ctrl+C退出)")
    try:
        smart.run()
    except KeyboardInterrupt:
        print("\n已停止")

使用说明:

Windows系统:

  1. 保存脚本:将代码保存为 .ps1.py 文件

  2. PowerShell运行

    # 以管理员身份运行
    powershell -ExecutionPolicy Bypass -File auto-brightness.ps1
  3. 设置开机自启(创建任务计划):

    schtasks /create /tn "AutoBrightness" /tr "powershell -File C:\path\to\script.ps1" /sc onlogon /ru SYSTEM

Linux系统:

chmod +x auto-brightness.sh
./auto-brightness.sh

推荐配置:

  • 如果使用笔记本电脑,优先使用方案一(简单可靠)
  • 如果追求更智能的调节,可以使用方案四(基于屏幕内容)
  • 如果需要更精确的调节,可以结合环境光传感器

需要我帮你调整具体的参数或添加其他功能吗?

抱歉,评论功能暂时关闭!