(Cette question est similaire à Delphi: How to respond to WM_SettingChange/WM_WinIniChange? mais pour la langue AutoHotKey. Ce n'est pas sur l'envoi WM_SETTINGCHANGE à l'intérieur AutoHotKey.)Comment répondre à WM_SETTINGCHANGE l'intérieur d'un script AutoHotKey
Dans un autre processus de Windows (« expéditeur »), Je modifie la variable d'environnement PATH en modifiant le Registre HK_CURRENT_USER. Puis j'envoie/publie un message WM_SETTINGCHANGE en utilisant l'API SendMessageTimeout.
Mon script AutoHotKey en cours d'exécution ("receiver"), que j'utilise en tant que programme de lancement, ne semble pas être au courant de la modification. Je veux capturer ce message afin d'actualiser la copie locale du script de la variable PATH. C'est possible?
Par exemple, le "expéditeur" pourrait être le System Properties dialog box, ou quelque another AutoHotKey script:
EnvUpdate
ou un autre binaire de Windows à portée de main tiers comme nircmd:
nircmd sysrefresh environment
ou un 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