2012-03-22 15 views
2

私は環境変数を更新するscriptを書きましたが、プログラムマネージャーにこの新しい情報でコンピューターのプログラムを更新するよう指示する必要があります。それはないとして、私はAutoHotkeyをのPostMessageの呼び出しにこれを翻訳しようとしていますが、私は何か間違ったことをやっているAutoHotkey PostMessageを使用してWM_WININICHANGEをProgram Managerに送信するにはどうすればよいですか?

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

:私はこれを引き起こすために別のプログラム内で行われているAPI呼び出しとしてこれを与えられましたワーキング。

List of Windows Messages

Send Messages to a Window or Its Controls

PostMessage/SendMessage

:ここ

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

はこれを行うには、私が見てきたAHKのリソースです:私は今のところ得ているのはここです元のAPI呼び出しを把握するために使用したリソースは次のとおりです。

SendMessage function

WM_WININICHANGE message

誰も私が私が間違ってやっているかを把握助けることができますか?

答えて

2

やや直接の翻訳は次のようになります。

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

のwParamとlParamにパラメータが表現されているので、リテラル文字列を引用符で囲む必要があります。逆に、ControlとWinTitleのパラメータは式ではないので、引用符はすべて文字通り解釈されます。

AutoHotkeyでは、(LPARAM)は、型変換ではなく、カッコで囲まれた変数です。それは省略すべきです。

MSDNは、WM_WININICHANGEの代わりにWM_SETTINGCHANGEを使用する必要があることを示していますが、実際にはこれらは同じものです。

最後に、EnvUpdateがすべてのウィンドウにWM_SETTINGCHANGEメッセージをブロードキャストすることに注意してください。

EnvUpdate 
+0

ダイレクトトランスレーションは実行しているようではありませんが、API呼び出しから翻訳で失われた可能性があります。 EnvUpdateは完全に機能するので、私は先に進み、より良い方法を示すためにこれを受け入れられた答えとして入れます。ありがとう! – SaintWacko

関連する問題