应用的上左下右边框 = 默认的窗口边框颜色 = “\HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\【ColorizationColor】”
因为这个颜色会在每一次设置主题色的时候被修改成系统主题色的色值,于是窗口边框的颜色就能与系统主题色一致
应用默认标题栏颜色 = 白色(浅色模式)/黑色(暗色模式)/“\HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM【AccentColor】”(勾选个性化选项里面“在一下区域显示主颜色”下面的“标题栏”)
其中UWP应用的主题色与传统应用的系统主题色都由“\HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM【AccentColor】”控制
应用的上左下右边框 = 深灰色(默认)/ “\HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM【ColorizationColor】”(勾选个性化选项里面“在一下区域显示主颜色”下面的“标题栏与窗口边框”)
因为 【ColorizationColor】会在每一次设置UWP的系统主题色的时候被修改成系统主题色的色值,于是窗口边框的颜色就能与系统主题色一致。
UWP应用的系统主题色与【AccentColor】解绑,也就是说即使修改了【AccentColor】,UWP应用的系统主题色依然跟随设置应用里面的颜色。
应用如果使用了自定义的毛玻璃效果(比如客户区扩展到标题栏自己实现的窗口边框的应用,典型如 windows 照片查看器),毛玻璃的颜色其实是【AccentColor】
应用默认标题栏颜色 = 白色(浅色模式)/黑色(暗色模式)/“\HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM【AccentColor】”(勾选个性化选项里面“在一下区域显示主颜色”下面的“标题栏和窗口边框”)
资源管理器的边框颜色 = 默认标题栏颜色
总结起来变动如下:
然后 chrome 的上边缘颜色也使用了一种鸡贼的实现方式:直接读取了DWM的【ColorizationColor】的色值自己画的上边缘
于是就会出现上面的奇葩情况:chrome 读到了被改成系统主题色的【ColorizationColor】,画了上边缘,然后左下右边缘的颜色又变成了深灰色)
目前不完美的地方:每一次弹 UAC 之后,颜色会变回系统主题色,需要手动重启一次 DWM.exe
关于系统用着用着发现颜色被改了回来的问题:
1909 版本的这个设置似乎有了更加激进的修改,之前的 1809 只要不进去个性化设置界面,注册表的颜色就不会被更改,新版本用着用着就会发现颜色被改了回来。
经过一番折腾,我直接把重启 DWM 的 bat 批处理和修改注册表合并在一起,这样就不用每次都要再开注册表编辑器去改了,如下:
::修改注册表修改窗口边框和激活窗口标题栏的颜色(这里我把标题栏改成了很浅的灰色,因为资源管理器的字是白色的,改白色就看不见了,第一行色值是16位ABGR)
reg add HKCU\Software\Microsoft\Windows\DWM\ /v AccentColor /t REG_DWORD /d 0xfff2f2f2 /f
reg add HKCU\Software\Microsoft\Windows\DWM\ /v ColorizationAfterglow /t REG_DWORD /d 0xffffffff /f
reg add HKCU\Software\Microsoft\Windows\DWM\ /v ColorizationColor /t REG_DWORD /d 0xffffffff /f
::重启 DWM 让注册表生效,需要管理员权限才生效,部分应用如 Chrome 重启后会黑屏新建一个窗口就能恢复
taskkill /IM dwm.exe /F
exit
上面内容用记事本保存为 .bat 文件,然后右键管理员权限运行即可。
运行之前请确保你的个性化设置【在以下区域显示主题色 -> 标题栏和窗口边框】勾选上。