Как да разберете дали в трея има икона на чуждо приложение
Уважаеми майстори! Моля, кажете ми как да направя subj. Просто трябва да проверя дали иконата е там или не. Знам манипулатора на прозореца, който обработва събитията в трея. Shell_NotifyIcon - Добавя, променя или премахва икона. Но има ли например функция, която да проверява наличието на икона от определен прозорец? Благодаря ви предварително
> Но има ли например функция, която проверява наличието на иконата > от конкретен прозорец?Едва ли :)
Може би по някакъв друг начин е възможно да се изчисли, че иконата от даден прозорец виси в трея? Все пак SysTrayX работи по някакъв начин с иконите - скрива ги, но изобщо не ги изтрива, позволява да кликнеш върху тях (от менюто му). Майстори! Никой не се е сблъсквал с такъв проблем?
Мога да предложа метод, който в обикновените хора се нарича "През дупето" И така, трябва да знаем: 1. Дръжка за тава (HTray). Просто е. Трябва да намерим детето на прозореца TrayNotifyWnd на прозореца Shell_TrayWnd. 2. Window handle (HWnd) - обработка на съобщения от иконата (казвате, че знаете това).
След това направете следното: 1. Емулираме по някакъв начин (SendMessage?) движението на мишката по протежение на трея (тоест по HTray), започвайки от левия край надясно. 2. В този случай Explorer или друга обвивка ще изпрати съобщение Shell_NotifyIcon до прозореца HWnd. 3. Трябва да хванем това съобщение. (Например с помощта на кука). 4. Ако в резултат на стъпка 1 съобщението до прозореца Hwnd не е пристигнало, тогава няма икона :-(
----------------------- Съжалявам, но не знам за по-добър начин. ако се получи, пишете на сапуна, искам да го проверя, тъй като току-що измислих метод, но трябва да работи!
>Има ли икона на нечие приложение в трея?Хм, може би грешка? Майната ти икона? Има ли приложение - това е целта. и икони - те са за потребителите.
> Cobalt Икони, разбира се, те са за потребители, само ако можеше да мине с търсене на прозорец или процес, не бих се перчил така и не бих задавал такива екзотични въпроси. Факт е, че програмата, докато работи, може да създаде 2 различни икони в трея или може би не. Тук трябва да хвана създаването на конкретна икона. Отначало, разбира се, се опитах да намеря както прозореца, отговорен за процеса, който се отразява в иконата на тавата, така и процеса, но не се получи. Извращение на иконата - последен шанс
След това - просто прихващайки TrayNotificationArea - вие сте вградени в AP Explorer, задавате функцията си на този прозорец - и получавате всичко на сребърен поднос.
> Кобалт (30.04.03 16:12)
Можете да го направите, но трябва да сте сигурни, че програмата, чиято икона искаме да знаем, се зарежда след нашата, в противен случай ще пропуснем най-интересното :)
И че моят метод не е изпробван - май няма нищо сложно?
Прочетох отново публикацията на AlexandrRya (04/29/03 22:55) Напълно съм съгласен - може би точно така трябва да се направи.