2012-03-22 4 views
2

Ich habe eine script geschrieben, die eine Umgebungsvariable aktualisiert, aber ich muss dem Programm-Manager sagen, dass er die Computerprogramme mit diesen neuen Informationen aktualisieren soll. Ich wurde dies als der API-Aufruf gegeben, die in einem anderen Programm gemacht wird, diese verursachen:Wie verwende ich AutoHotkey PostMessage, um WM_WININICHANGE zum Programm-Manager zu senden?

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

ich versucht bin zu dieser in einen Anruf AutoHotKey Postmessage zu übersetzen, aber ich bin etwas falsch zu machen, da es nicht ist Arbeiten. Hier ist, wo ich bisher bekommen habe:

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

Hier sind die AHK Ressourcen ich gesucht habe, dies zu tun:

List of Windows Messages

Send Messages to a Window or Its Controls

PostMessage/SendMessage

Und hier sind die Ressourcen, die ich verwendet habe, um den ursprünglichen API-Aufruf herauszufinden:

SendMessage function

WM_WININICHANGE message

Kann mir jemand helfen, herauszufinden, was ich falsch mache?

Antwort

2

Eine etwas direkte Übersetzung wäre:

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

Die wParam und lParam Parameter Ausdrücke sind, so Literalzeichenfolgen zitiert werden müssen. Umgekehrt sind die Control- und WinTitle-Parameter keine Ausdrücke, daher würden alle Anführungszeichen wörtlich interpretiert.

In AutoHotkey, (LPARAM) ist nur eine Variable in Klammern, nicht eine Art Besetzung. Es sollte weggelassen werden.

Beachten Sie, dass MSDN angibt WM_SETTINGCHANGE sollte statt WM_WININICHANGE verwendet werden, aber diese sind eigentlich ein und dasselbe.

Beachten Sie schließlich, dass EnvUpdate die WM_SETTINGCHANGE Nachricht an alle Fenster sendet.

EnvUpdate 
+0

Die direkte Übersetzung scheint nicht zu tun, was sie sollte, aber etwas könnte in der Übersetzung aus dem API-Aufruf verloren gegangen sein. EnvUpdate funktioniert perfekt, also werde ich weitermachen und dies als akzeptierte Antwort verwenden, um mir einen besseren Weg zu zeigen. Vielen Dank! – SaintWacko

Verwandte Themen