Как использовать AutoHotkey PostMessage для отправки WM_WININICHANGE в диспетчер программ? - PullRequest
2 голосов
/ 23 марта 2012

Я написал скрипт , который обновляет переменную среды, но мне нужно сказать Менеджеру программ обновить программы компьютера с этой новой информацией. Мне дали это как вызов 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 сообщение

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

1 Ответ

2 голосов
/ 24 марта 2012

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

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

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

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

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

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

EnvUpdate
...