У меня есть элемент управления 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. Это окончательный ответ.