【发布时间】:2010-08-12 03:37:12
【问题描述】:
(此问题类似于Delphi: How to respond to WM_SettingChange/WM_WinIniChange?,但针对AutoHotKey 语言。这与从AutoHotKey 内部发送WM_SETTINGCHANGE 无关。)
在另一个 Windows 进程(“发送方”)中,我通过修改 HK_CURRENT_USER 注册表来更改 PATH 环境变量。然后我使用 SendMessageTimeout API 发送/发布 WM_SETTINGCHANGE 消息。
我用作程序启动器的同时运行的 AutoHotKey 脚本(“接收器”)似乎并没有意识到这种变化。我想捕获此消息以刷新脚本的 PATH 变量的本地副本。有可能吗?
例如,“发件人”可能是System Properties dialog box,或者一些another AutoHotKey script:
EnvUpdate
或其他一些方便的第三方 Windows 二进制文件,例如 nircmd:
nircmd sysrefresh environment
或一些Ruby code:
### 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
【问题讨论】:
标签: windows environment-variables autohotkey