Как найти расположение значка на панели задач
-
07-07-2019 - |
Вопрос
У меня есть элемент управления NotifyIcon, который появляется на панели задач.Как мне найти местоположение (x, y) значка на экране?
Спасибо
Решение
Вы не можете.Получить дескриптор окна для панели задач несложно: GetClassName() возвращает «ToolbarWindow32», имя класса стандартного общего элемента управления ToolBAR.Помните, что в 64-битной ОС их два.Затем вы можете отправлять ему сообщения типа TB_GETBUTTONINFO.Основная проблема заключается в том, что вы не будете знать, какой идентификатор кнопки выбрать, а возвращаемая информация не включает положение кнопки.
И это к лучшему: кнопки перемещаются, и вы не можете их заблокировать.
Другие советы
На самом деле вы можете это сделать, вот код, который показывает, как это сделать, и многое другое.
В любом событии мыши из NotifyIcon просто посмотрите Control.MousePosition, он содержит (x,y) мыши.То же самое можно сделать, чтобы расположить ContextMenu в форме/элементе управления именно там, где была щелкнута форма/элемент управления, используя эти значения (x,y).
Хороший пример того и другого здесь:
Подробнее здесь: http://code.msdn.microsoft.com/TheNotifyIconExample
После долгого пути проб и ошибок и разработки собственного локатора значков уведомлений я разработал способ поиска значка с лучшим положением, который до сих пор работал хорошо, пока не увидел этот удивительный проект @zhwang. SuperNotifyIcon.В этом проекте есть три способа найти значок уведомления: от неточного (как моя собственная разработка) до использования нового в Windows 7 API.Это окончательный ответ.