(这个问题类似于Delphi: How to respond to WM_SettingChange/WM_WinIniChange?但针对AutoHotKey语言。这与从 AutoHotKey 内部发送 WM_SETTINGCHANGE 无关。)
在另一个 Windows 进程(“发件人”)中,我通过修改 HK_CURRENT_USER 注册表来更改 PATH 环境变量。然后我使用 SendMessageTimeout API 发送/发布 WM_SETTINGCHANGE 消息。
我用作程序启动器的同时运行的 AutoHotKey 脚本(“接收器”)似乎没有意识到这种变化。我想捕获此消息以刷新 PATH 变量的脚本本地副本。可能吗?
例如,“发件人”可以是系统属性对话框,或者其他 AutoHotKey 脚本:
EnvUpdate
或其他一些方便的第三方 Windows 二进制文件,例如nircmd:
nircmd sysrefresh environment
或一些Ruby 代码:
### This is a -*- ruby -*- script
require 'Win32API'
module Windows::EnvByReg
def self.envupdate()
result = 0
wParam_unused = 0
timeout_ms = 5000
SendMessageTimeout.call(HWND_BROADCAST, WM_SETTINGCHANGE,
wParam_unused, 'Environment',
SMTO_ABORTIFHUNG, timeout_ms, result)
end
SendMessageTimeout = Win32API.new('user32', 'SendMessageTimeout',
'LLLPLLP', 'L')
HWND_BROADCAST = 0xffff
WM_SETTINGCHANGE = 0x001A
SMTO_ABORTIFHUNG = 2
end#module
if __FILE__ == $PROGRAM_NAME
Windows::EnvByReg.envupdate
end