Как использовать AutoHotkey PostMessage для отправки WM_WININICHANGE Менеджеру программ?

Я написал скрипт, который обновляет переменную среды, но мне нужно скажите Программному менеджеру обновить программы компьютера с помощью этой новой информации. Мне дали это как вызов API, который сделан в другой программе, чтобы вызвать это:

::SendMessage(::FindWindow("Progman", NULL), WM_WININICHANGE, 0L, (LPARAM)"Environment");

Я пытаюсь перевести это в вызов AutoHotKey PostMessage, но я делаю что-то не так, так как это не работает. Вот где я до сих пор:

PostMessage, 0x1A,, (LPARAM)"Environment", "Program Manager"

Вот ресурсы AHK, которые я искал, чтобы сделать это:

Список сообщений Windows

Отправлять сообщения окну или его элементам управления

PostMessage / SendMessage

А вот ресурсы, которые я использовал, чтобы выяснить исходный вызов API:

функция SendMessage

Сообщение WM_WININICHANGE

Может ли кто-нибудь помочь мне понять, что я делаю неправильно?


person SaintWacko    schedule 22.03.2012    source источник


Ответы (1)


Несколько прямой перевод будет:

SendMessage 0x1A,, "Environment",, ahk_class Progman

Параметры wParam и lParam являются выражениями, поэтому литеральные строки должны заключаться в кавычки. И наоборот, параметры Control и WinTitle не являются выражениями, поэтому любые кавычки будут интерпретироваться буквально.

В AutoHotkey (LPARAM) — это просто переменная, заключенная в круглые скобки, а не преобразование типа. Его следует опустить.

Обратите внимание, что MSDN указывает, что вместо WM_WININICHANGE, но на самом деле это одно и то же.

Наконец, обратите внимание, что EnvUpdate передает сообщение WM_SETTINGCHANGE всем окнам.

EnvUpdate
person Lexikos    schedule 24.03.2012
comment
Прямой перевод, кажется, не делает то, что должен, но что-то могло быть потеряно при переводе из вызова API. EnvUpdate работает отлично, поэтому я собираюсь сделать это принятым ответом, чтобы показать мне лучший способ. Спасибо! - person SaintWacko; 26.03.2012