8

私のアプリケーションはシステム トレイに収まるように設計されており、Windows 7 のネットワーク/ボリューム/電源/アクション センターのトレイ項目 (および Windows Vista の同等の項目) と同様に動作します。つまり、トレイ アイコンをクリックすると表示され、フォーカスを失うと非表示になります。

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

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

Vista では、これは大した問題ではありませんでした。アプリケーションを常に右下隅に設定していましたが、問題ないように見えました (ただし、タスクバーが画面の下部に配置されていない場合のロジックは含まれていませんでした)。 )。ただし、Windows 7 では、ボリューム コントロールなどのようにその上にホバリングするのではなく、アプリケーションが新しいシステム トレイのポップアウト ボックスを覆い隠してしまいます。

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

4

2 に答える 2

7

Windows 7 以降では、Shell_NotifyIconGetRect()関数が公開されています。この関数は、アイコンの外接する四角形の画面座標を返します。

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

于 2010-12-06T12:46:41.153 に答える
4

これに加えて、Shell_NotifyIconGetRect 関数が利用できない場合に通知アイコンの場所を見つける方法について書きました: http://blog.quppa.net/2010/12/28/windows-7-style-notification -area-applications-in-wpf-part-6-notify-icon-position-pre-windows-7/

于 2010-12-27T14:53:03.480 に答える