Re: Найти иконку в трее
> Поставить указатель в трей с помощью SetCursorPos в конец трея
> Задавая приращения по горизонтали, обойти указателем иконки в
> трее. При этом будут появляться ярлычки подсказок к иконкам...
А у меня панель задач вдвое выше и автоскрывается. Мало того, что её
показать надо, прыгнув мышью в самый низ экрана и подождав, так ещё и иконки
в трее в три ряда выстраиваются. Каким образом ты собрался все их обойти по
горизонтали? И это ещё при том, что XPя по умолчанию скрывает некоторые
"неактивные" достаточно долгое время иконки за эдакой стрелочкой, и чтобы их
увидеть, на неё тоже нажать надо. И при этом не забыть, что панель задач
может быть не только внизу, но и справа, слева или вверху, где юзеру
удобнее. А если она автоскрывается, то при "автопоказе" оно не обязательно
будет на переднем плане, а вполне может оказаться под какими-то другими
окнами, даже если выставлена опция "Отображать панель задач поверх остальных
окон" - как меня нервирует, кстати.
Ну и чтобы добить. Ждать над каждой иконкой, нужно неопределённое время,
так как частенько обработчик рабочего стола неизвестно чем занимается вместо
того, чтобы побыстрому обработать событие, ему направленное. У меня иногда
бывает, что рабочий стол и панель задач не откликаются на воздействия извне,
хотя остальная винда работает как ни в чём не бывало, и все мышиные и
клавиатурные пинки не возымевают никакого действия. По прошествии
полутора-двух минут, они друг приходят в себя и побыстрому обрабатывают всё
то, что им быто понапнуто за это время. Весело бывает понаблюдать...
Напрягает не меньше. Если кто знает лекарство или хотя бы причину такого
поведения, буду рад любой информации.
Так что ИМХО избранный тобою подход в корне неверен. Я в принципе
недолюбливаю всё то, что делается потём эмуляции действий пользователя, так
как программно всей изощрённости человеческого разума не проэмулируешь.
Особенно его экстраваннтности и индивидуальности. Посему начисто отвергаю
решения, основанные на mouse_event() и keybd_event() Да и в MSDN чётко
говорится, что они заменены (superseded). Ищи другие пути, не то запаришся
поддерживать свою программу - пользователи задолбают.
Вот начало. Окно панели задач относится к классу Shell_TrayWnd. Одно из
его дочерних окон имеет класс TrayNotifyWnd, а у него в свою очередь одно из
дочерних - класс SysPager, которое в свою очередь одним из дочерних окно
класса ToolbarWindow32 и с заголовком (в русской редакции XP!) "Область
уведомлений", в котором уже и прорисовываются иконки. Кнопка, которая
открывает скрытые "неактивные" иконки, имеет класс Button и является
дочерним окном непосредственно от панели задач. Хватит информации для
начала? Всю её я получил простым разглядыванием Spy++ из комплекта MS
DevStudio. Но её понятное дело можно получить и программно - EnumWindows(),
EnumChildWindows(), GetWindow(), GetWindowInfo(), GetClassName() итп Скорее
всего некоторые неопределённости останутся, но ИМХО значительно меньше и
более легко обходимые, чем я привёл вначале по твоему методу.
P.S. Чуть не забыл: mouse_event() и keybd_event() заменены на
SendInput()
--
С уважением, boroda
Номер выпуска : 5188
Возраст листа : 873 (дней)
Количество подписчиков : 546
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/513477
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru