如何使用AutoHotkey PostMessage将WM_WININICHANGE发送到程序管理器?

时间:2012-03-22 22:58:41

标签: windows-xp environment-variables autohotkey

我写了一个更新环境变量的script,但我需要告诉程序管理员使用这些新信息更新计算机的程序。我被赋予了这个作为在另一个程序中进行的API调用的原因:

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

我试图将其转换为AutoHotKey PostMessage调用,但我做错了,因为它无法正常工作。这是我到目前为止的地方:

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

以下是我一直在寻找的AHK资源:

List of Windows Messages

Send Messages to a Window or Its Controls

PostMessage / SendMessage

以下是我用来计算原始API调用的资源:

SendMessage function

WM_WININICHANGE message

任何人都可以帮我弄清楚我做错了吗?

1 个答案:

答案 0 :(得分:2)

有点直接的翻译是:

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

wParam和lParam参数是表达式,因此必须引用文字字符串。相反,Control和WinTitle参数不是表达式,因此任何引号都会按字面解释。

在AutoHotkey中,(LPARAM)只是括在括号中的变量,而不是类型转换。它应该被省略。

请注意,MSDN表示应使用WM_SETTINGCHANGE代替WM_WININICHANGE,但这些实际上是同一个。

最后,请注意EnvUpdate向所有窗口广播WM_SETTINGCHANGE消息。

EnvUpdate