我正在尝试让 Windows 10 模拟 Google 与 Android 9 一起发布的新“数字健康”功能。基本上,它会在夜间将屏幕更改为灰度,以试图激励人们放下手机去睡觉。
当我了解 Windows 10 的“颜色过滤器”功能(它还允许您将颜色配置文件设置为灰度)时,我认为编写脚本可能很容易,但我似乎找不到直接在脚本中执行此操作的方法。
目前,我基本上是通过打开Win+ Ctrl+C切换热键来使其工作,并设置了一个计划任务来运行 AutoHotkey 脚本,该脚本本质上是通过按下这些键来触发快捷方式。这可以正常工作,但我希望能够将快捷键保持禁用状态,这样我就不会意外按下它,或者有这么简单的方法来禁用该功能(并削弱“数字健康”效果)。此外,脚本无法知道设置的状态。如果它运行两次,它会自行撤消。目前我没有为机器编写脚本来取消设置该功能,但如果我创建了一个任务来执行此操作,并且在夜间触发之前关闭机器,它可能会在早上变成灰度。
我的问题是问是否有任何方法可以直接明确设置“打开颜色过滤器”或“关闭颜色过滤器”(通过 PowerShell、Batch、VBS 等),而不依赖于快捷键,最好不要切换?
答案1
所以我尝试了同样的事情并最终使用:https://zerowidthjoiner.net/negativescreen在灰度模式下,很容易通过编程触发。
在尝试之前,我遇到了一些有趣的事情。我尝试设置注册表项以启用颜色过滤:
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Accessibility]
"Configuration"="colorfiltering"
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig]
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\colorfiltering]
"Active"=dword:00000001
"FilterType"=dword:00000000
[HKEY_CURRENT_USER\Software\Microsoft\ColorFiltering]
"HotkeyEnabled"=dword:00000001
"Active"=dword:00000001
"FilterType"=dword:00000000
这本身不起作用,因为设置未应用。有趣的是,当我触发 UAC 弹出窗口时,颜色过滤器将被应用。因此通过调用
powershell Start-Process cmd.exe -Verb RunAs
可以通过编程方式应用该设置。但是这个解决方案很糟糕,因为会生成实际的 UAC 弹出窗口。
但是如果有人知道强制重绘窗口的另一种方法(或打开 UAC 时发生的任何事情),就应该能够以编程方式应用更改的设置。
答案2
我也有同样的需求。我用过自动热键为此。此脚本每 10 分钟检查一次。如果时间在晚上 10:30 - 10:39 之间,它会按Win+ Ctrl+ C。
#Persistent
SetTimer, ToggleGreyscaleFilter, 600000 ; Check every 10 min
ToggleGreyscaleFilter:
TheTime = %A_Hour%%A_Min%
If TheTime Between 2230 and 2239 ; If it is between 10:30 and 10:39 pm
{
MsgBox, "Sleep" ; Optional popup message
Send #^c ; Press Win-Ctrl-C to toggle greyscale
}
为了实现此功能,请在“设置”>“轻松访问”>“颜色过滤器”中:
- 允许使用快捷键打开或关闭过滤器 (Win-Ctrl-C)
- 选择灰度过滤器
答案3
对于那些在 Windows 上寻找简单解决方案的人,您可以使用放大镜Python 3.8+ 库。它支持灰度颜色效果,并且您还可以使用它来制作动画过渡(通过随时间改变效果强度)。
import win_magnification as mag
mag_api = mag.WinMagnificationAPI()
# Set grayscale color filter
mag_api.fullscreen.color_effect.raw = mag.const.COLOR_GRAYSCALE_EFFECT
# Animate from normal to grayscale
import time
mag_api.fullscreen.color_effect.reset()
mag_api.fullscreen.color_effect.make_transition(
end=mag.const.COLOR_GRAYSCALE_EFFECT,
initial_power=0,
)
for i in range(100):
mag_api.fullscreen.color_effect.transition_power += 0.01
time.sleep(0.05)