本文目录导读:

- 方案一:基于时间自动调整(Windows + PowerShell)
- 方案二:基于环境光传感器(Windows + Python)
- 方案三:Linux环境(使用xrandr)
- 方案四:智能调节(基于屏幕内容分析)
- 使用说明:
我来帮你创建一个自动调整显示器亮度的脚本,这里提供几种方案:
基于时间自动调整(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系统:
-
保存脚本:将代码保存为
.ps1或.py文件 -
PowerShell运行:
# 以管理员身份运行 powershell -ExecutionPolicy Bypass -File auto-brightness.ps1
-
设置开机自启(创建任务计划):
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
推荐配置:
- 如果使用笔记本电脑,优先使用方案一(简单可靠)
- 如果追求更智能的调节,可以使用方案四(基于屏幕内容)
- 如果需要更精确的调节,可以结合环境光传感器
需要我帮你调整具体的参数或添加其他功能吗?