Определение местоположения иконки в трее - PullRequest
7 голосов
/ 06 декабря 2010

Мое приложение предназначено для размещения в системном трее и ведет себя так же, как элементы лотка Network / Volume / Power / Action Center в Windows 7 (и аналогичные элементы в Windows Vista).То есть он становится видимым при щелчке значка в трее и скрывается при потере фокуса.

Приложение написано в WPF, но в настоящее время я использую NotifyIcon из WinForms для иконки в трее.

Я хотел бы знать, есть ли у кого-нибудь какие-либо предложения относительно того, как я могу определить положение (т.е. экранные координаты) значка на панели задач моего приложения.По умолчанию элементы лотка в Windows Vista / 7 имеют некоторый способ сделать это, так как всплывающие окна выровнены по центру над значком соответствующего лотка.

В Vista это не было большой проблемой: у меня былоприложение постоянно находилось в правом нижнем углу, и это выглядело нормально (хотя не было никакой логики для случаев, когда панель задач не помещалась внизу экрана).Однако в Windows 7 мое приложение закрывает всплывающее окно нового системного трея, а не зависает над ним, как регуляторы громкости и т. Д.

Лучшее решение, которое я видел в моих поискахдо сих пор обрабатывать событие-указатель мыши на NotifyIcon и использовать координаты мыши для определения положения значка.Я думаю, что в конечном итоге я воспользуюсь этим методом, если только у кого-то нет лучшей идеи, хотя он не идеален, поскольку позиция будет немного отличаться в зависимости от того, где внутри значка пользователь нажимает.

Ответы [ 2 ]

6 голосов
/ 06 декабря 2010

Windows 7 и более поздние версии предоставляют функцию Shell_NotifyIconGetRect () , которая возвращает экранные координаты ограничительного прямоугольника значка.

Вам потребуется указать GUID значка уведомления, хотяи я не знаю, можете ли вы получить доступ к этому свойству через управляемый NotifyIcon класс.

4 голосов
/ 27 декабря 2010

Кроме того, я написал о методе поиска местоположения значка уведомления, когда функция 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/

...