Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.168.172] |
|
Сообщ.
#1
,
|
|
|
Приложение выставляет иконку в трей. Нужно, чтобы была реакция на прокрутку колёсика на иконке (как это реализовано в AIMP, но и там это работает только при активном окне, а надо чтобы всегда). Суть проблемы - при прокрутке колеса вообще никакие сообщения приложению не отсылаются. Конечно, можно сделать глобальный хук, но:
во-1 - как отследить, что под курсором именно моя иконка? во-2 не хочется грузить ЦП бесполезной работой. Есть у кого какие предложения? Добавлено Апдейт: глобальный хук можно поставить только через DLL, что крайне нежелательно. |
Сообщ.
#2
,
|
|
|
Апдейт 2: AIMP, оказывается, при активном окне реагирует на колесо в любой части экрана. Видать, там как раз глобальный хук и стоит. Этот пример исключаем из рассмотрения.
|
Сообщ.
#3
,
|
|
|
When the uVersion member is either 0 or NOTIFYICON_VERSION, the wParam parameter of the message contains the identifier of the taskbar icon in which the event occurred. This identifier can be 32 bits in length. The lParam parameter holds the mouse or keyboard message associated with the event. For example, when the pointer moves over a taskbar icon, lParam is set to WM_MOUSEMOVE.
https://msdn.microsoft.com/en-us/library/wi...2(v=vs.85).aspx вроде бы должно сработать |
Сообщ.
#4
,
|
|
|
Fr0sT, т.е. вы всё-таки предлагаете глобальный хук?
|
Сообщ.
#5
,
|
|
|
Судя по справке, должны приходить мышиные сообщения, в т.ч. и WM_MOUSEWHEEL.
|
Сообщ.
#6
,
|
|
|
Fr0sT, ну вот попробуйте сами))
Прикреплённый файлTrayIconMessages.zip (3,62 Кбайт, скачиваний: 177) |
Сообщ.
#7
,
|
|
|
Во-первых, параметр не TMsg, а TMessage, иначе данные в обработчик приходят "сдвинутыми". Что интересно, установка uVersion в NOTIFYICON_VERSION_4 никак не влияет, хотя по справке должно.
Во-вторых, сообщения от колеса приходят только на фокусированный контрол. Именно так и работает AIMP. Справка говорит, что так и должно быть: "Sent to the focus window when the mouse wheel is rotated". Так что иконке сообщение не придет, увы . |
Сообщ.
#8
,
|
|
|
Fr0sT,
Цитата Так что иконке сообщение не придет, увы Это я уже давно понял. Вот и пытаюсь выяснить, как сделать это обходными путями? |
Сообщ.
#9
,
|
|
|
Без хука имхо никак.
Ну или такой костыль: по входу мыши на иконку показывать окно за пределами экрана и делать его фокусированным. Оно и получит события колесика. По уходу мыши - прятать его. Правда, уход отслеживать придется тупо по таймеру |