1

別のアプリケーションのトレイアイコンのメニューからメニュー項目をクリックする必要があるアプリケーションを作成しています。説明が苦手なので、理解を深めるためのスクリーンショットを次に示します。 スクリーンショットの例
したがって、これらのメニュー項目の1つ、たとえば「終了」をクリックする必要があります。

そのためには、WinApiを使用する必要があることを知っています。ただし、私が知る限り、メッセージWM_NOTIFYはメニュー項目のクリックについてトップウィンドウに通知する役割を果たします。そして、MSDNサイトが言うように、For Windows 2000 and later systems, the WM_NOTIFY message cannot be sent between processes。アプリケーションを実行したいPCはWindowsXPを実行しているため、このメッセージをウィンドウに送信できません。メニュー項目をクリックする他の方法はありますか?

前もって感謝します。

4

1 に答える 1

5

ソリューションは、ほとんどの場合、アプリケーション固有です。HWNDトレイアイコンメニューを備えたアプリケーションが通常行うことは、アイコンを登録し、通知用の独自のウィンドウハンドルを提供することです。ここで、Windowsシェルはマウスイベントを転送します。アイコンがクリックされると、ウィンドウは転送された偶数を受け取り、APIを使用してメニューを表示します。運が良ければ、選択したメニュー項目識別子をメッセージ/通知TrackPopupMenuとして同じウィンドウなどのウィンドウにポストバックするように要求します。WM_COMMAND

したがって、基本的に必要なのは、メニューをクリックしたときにプロセスまたはスレッド内で生成されるメッセージを対象のアプリケーションをスパイすることです。Spy++それを行うための良いツールです。トレイアイコンのコンテキストメニュー項目を選択した結果、特定のメッセージ(コマンド)がウィンドウに投稿されているかどうかを確認したら、制御アプリケーションで必要なのは、このウィンドウを見つけることだけです。つまりHWND、名前やプロセス名で検索できます。 、そしてそれにWM_COMMANDメッセージを投稿します。

メニューがアプリケーション側でどのように実装されるかについて特定の仮定を行っているため、これが機能することは保証されませんが、前述の戦略に沿って調査することは理にかなっています。

UPD。私のAsusEEEPCネットブックには、システムトレイのアイコンとメニューからモニターの解像度を切り替えるAsusユーティリティが付属しています。そして、デフォルトの解像度は私には良くありませんでした。この小さなアプリは、解像度の変更を自動化するコマンドをこのユーティリティに投稿しました。

于 2012-08-02T17:06:59.040 に答える