2010-12-06 14 views
6

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

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

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

Vistaではこれはあまり問題ではありませんでした。アプリケーションを永久に右下に設定しましたが、これはうまくいきました(ただし、タスクバーが画面の下部)。しかし、Windows 7では、アプリケーションは音量コントロールなどのように上にホバーするのではなく、新しいシステムトレイのポップアウトボックスを覆い隠してしまいます。

私の検索で今までに見たベストソリューションは、NotifyIconでマウスアップイベントを処理し、マウス座標を使用してアイコンの位置を決定することです。誰かがより良いアイデアを持っていない限り、この方法を使用することになりますが、アイコン内でユーザーがクリックする位置によって位置が多少異なるため理想的ではありません。

答えて

6

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

通知アイコンGUIDを指定する必要があります。管理されているNotifyIconクラスからそのプロパティにアクセスできるかどうかわかりません。

これにさらに
+0

はどうもありがとうございました:)私はそれを得ることができれば私が表示されますNotifyIconを使用してレポートを返します。 – Quppa

+6

WinForms NotifyIconクラスで動作するShell_NotifyIconGetRect()関数があります。私はブログの記事をhttp://blog.quppa.net/?p=17 – Quppa

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/

+0

にお送りしています。これは古いWindowsでのみ動作しますか?私はそれが新しいバージョン(勝利7,8)で動作するのですか? – Jet

+0

Windows 7以上ではShell_NotifyIconGetRect関数を使用することを強くお勧めしますが、ここで説明した方法は新しいバージョンのWindowsでも有効です。ただし、ポップアップボックス内の場所は見つかりません。 – Quppa

関連する問題