(Этот вопрос похож на Delphi: как ответить на WM_SettingChange / WM_WinIniChange? , но для языка AutoHotKey . Это не относится к отправке WM_SETTINGCHANGE изнутри AutoHotKey.)
В другом процессе Windows («отправитель») я изменяю переменную среды PATH, изменяя реестр HK_CURRENT_USER.Затем я отправляю / публикую сообщение WM_SETTINGCHANGE с помощью API SendMessageTimeout.
Мой одновременно запущенный скрипт 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