2010-12-06 27 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 2010-12-06 13:20:39

+6

我有與WinForms NotifyIcon類一起使用的Shell_NotifyIconGetRect()函數。我在這裏的博客文章中記錄了這個過程:http://blog.quppa.net/?p=17 – Quppa 2010-12-08 06:24:09