使用AutoHotKey v2切换Windows深色模式时RegWrite参数报错求助
问题根源:AutoHotkey v2 中 RegWrite 的参数顺序变更
你遇到的报错是因为AutoHotkey v2 完全调整了 RegWrite 的参数顺序,而你沿用了v1版本的参数排列逻辑,导致第二个参数不符合函数要求。
关键区别:
- AHK v1 的 RegWrite 语法:
RegWrite(类型, 键路径, 值名称, 数值) - AHK v2 的 RegWrite 语法:
RegWrite(数值, 键路径, 值名称, [类型])
简单说,v2把要写入的数值放在了第一个参数位置,类型变成了可选参数(默认是REG_SZ,写入数值时会自动识别为REG_DWORD,也可以显式指定)。而你用v1的顺序传入参数,自然会触发"参数#2无效"的报错,而RegRead因为v2保留了和v1一致的参数顺序,所以能正常读取。
修正后的脚本
^!r:: { keyName := "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" valueName := "AppsUseLightTheme" appMode := RegRead(keyName, valueName) ; MsgBox(appMode) If (appMode = 0) ; 当前是深色模式,切换为浅色 RegWrite(1, keyName, valueName, "REG_DWORD") else ; 当前是浅色模式,切换为深色 RegWrite(0, keyName, valueName, "REG_DWORD") }
更简洁的写法(自动取反切换)
因为0和1可以直接用1减去当前值来实现切换,还能省略显式的类型指定(v2会自动把数值按REG_DWORD写入):
^!r:: { keyName := "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" valueName := "AppsUseLightTheme" RegWrite(1 - RegRead(keyName, valueName), keyName, valueName) }
额外提示
修改这个注册表项后,部分桌面应用和系统组件需要重启才能生效,如果想要即时刷新系统主题,可以在脚本末尾添加以下代码(重启资源管理器):
ProcessClose("explorer.exe") Run("explorer.exe")
内容的提问来源于stack exchange,提问作者Chevalric
相关产品推荐
相关产品推荐

