(この質問は、Delphi: How to response to WM_SettingChange/WM_WinIniChange? に似ていますが、AutoHotKey言語に関するものです。これは、AutoHotKey 内から WM_SETTINGCHANGE を送信することに関するものではありません。)
別の Windows プロセス (「送信者」) で、HK_CURRENT_USER レジストリを変更して PATH 環境変数を変更します。次に、SendMessageTimeout API を使用して WM_SETTINGCHANGE メッセージを送信/発行します。
プログラムランチャーとして使用している、同時に実行している AutoHotKey スクリプト (「レシーバー」) は、変更を認識していないようです。スクリプトの PATH 変数のローカル コピーを更新するために、このメッセージをキャプチャしたいと考えています。出来ますか?
たとえば、「送信者」は、[システム プロパティ] ダイアログ ボックス、または別の AutoHotKey スクリプトである可能性があります。
EnvUpdate
またはnircmdのような他の便利なサードパーティ Windows バイナリ:
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