2012-03-22 71 views
2

我写了一个script它更新了一个环境变量,但我需要告诉程序管理器用这个新信息更新计算机的程序。我得到这个作为被另一个程序中所做的API调用导致此:如何使用AutoHotkey PostMessage将WM_WININICHANGE发送给程序管理器?

::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

谁能帮我找出我做错了吗?

回答

2

一个有点直接翻译应该是:

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

的wParam和lParam参数是表达式,所以文字字符串必须加引号。相反,Control和WinTitle参数不是表达式,所以任何引号都可以从字面上理解。

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

请注意,MSDN表示应使用WM_SETTINGCHANGE而不是WM_WININICHANGE,但这些实际上是一样的。

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

EnvUpdate 
+0

直接翻译似乎没有在做它应该做的事情,但是从API调用翻译过来的东西可能已经丢失。 EnvUpdate完美地工作,所以我会继续前进,并将其作为公认的答案,为我展示一种更好的方式。谢谢! – SaintWacko 2012-03-26 15:34:25

相关问题