問題

私のアプリケーションは、システムトレイに座って、Windows 7のNetwork/Volume/Power/Action Centerトレイアイテム(およびWindows Vistaの同等のアイテム)と同様に動作するように設計されています。つまり、トレイアイコンがクリックされたときに表示され、フォーカスが失われたとき

アプリケーションはWPFで書かれていますが、現在はトレイアイコンのWinFormsからNotifyIconを使用しています。

アプリケーションのトレイアイコンの位置(つまり画面座標)をどのように決定するかについて誰かが提案しているかどうかを知りたいと思います。デフォルトのWindows Vista/7トレイアイテムには、関連するトレイアイコンの上に中央揃えのウィンドウがあるため、これを行う方法があります。

Vistaでは、これはあまり問題ではありませんでした。私はアプリケーションをbottom-rightコーナーに永久に設定していましたが、これはうまく見えました(ただし、タスクバーが画面の一番下に置かれていない場合にはロジックは含まれていませんでした)。

これまでの検索で見た最良の解決策は、NotifyIconのmouse-upイベントを処理し、マウス座標を使用してアイコンの位置を決定することです。誰かがより良いアイデアを持っていない限り、この方法を使用することになると思いますが、ユーザーがクリックするアイコン内のどこに位置がわずかに異なるため、理想的ではありません。

  ベストアンサー

Windows 7以降では、 Shell_NotifyIconGetRect() 関数が公開され、アイコンの境界矩形の画面座標が返されます。

ただし、通知アイコンGUIDを提供する必要があります。マネージド NotifyIcon クラスでそのプロパティにアクセスできるかどうかはわかりません。

  同じタグがついた質問を見る

wpfpositioncoordinatessystem-traynotifyicon