Как узнать расположение значка в системном трее

У меня есть элемент управления NotifyIcon, который отображается на панели задач. Как я могу найти расположение (x, y) значка на экране?

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
8 839
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы не можете. Получить дескриптор окна для панели задач несложно, GetClassName () возвращает "ToolbarWindow32", имя класса стандартного общего элемента управления TOOLBAR. Помните, что в 64-битной ОС их два. Затем вы можете отправлять ему сообщения, например TB_GETBUTTONINFO. Основная проблема заключается в том, что вы не знаете, какой идентификатор кнопки выбрать, а возвращаемая информация не включает положение кнопки.

Что к лучшему, кнопки перемещаются, а вы не можете их заблокировать.

github.com/rzhw/SuperNotifyIcon явно делает это. Я понимаю, что, возможно, он не был раскрыт, когда на это был дан ответ, но он выполняет задачу с помощью собственных вызовов, как вы говорите, это невозможно - что работает в более старых версиях Windows. Это также можно сделать с помощью нового API Windows 7. «Я не думаю, что ты сможешь» было бы лучшим ответом, чем «Ты не можешь» - это немного достижимо.
caesay 24.12.2014 06:08

Отдайте должное автору нет, игнорируя последнее предложение моего сообщения. Он прояснил это, поместив код в папку Устарело и используя комментарии вроде «Вот драконы». Вы можете проигнорировать совет, вы можете проголосовать против него, что не делает его недействительным.

Hans Passant 06.02.2015 13:43

На самом деле вы можете это сделать, вот код, который показывает вам, как и многое другое.

В любом событии мыши из NotifyIcon просто посмотрите на Control.MousePosition, он содержит (x, y) мыши. То же самое можно сделать, чтобы разместить ContextMenu в форме / элементе управления именно там, где была нажата форма / элемент управления, используя эти значения (x, y).

Вот хороший пример того и другого:

Подробнее здесь: http://code.msdn.microsoft.com/TheNotifyIconExample

После долгого пути проб и ошибок и разработки моего собственного локатора значков уведомлений, я разработал способ найти значок наилучшего положения, пока что неплохо, пока я не увидел этот удивительный проект @zhwang SuperNotifyIcon. В этом проекте есть три способа найти значок уведомления: от неточного (как моя собственная разработка) до использования нового в Windows 7 API. Это окончательный ответ.

Другие вопросы по теме