2013-07-17 2 views
8

У меня есть виртуальная машина Windows 7, в которой работают мои обязательные корпоративные системы связи (Lync и Outlook). То, что я хотел бы сделать, - запустить процесс на этой машине Windows, которая отслеживает системный трей и отправляет уведомления на мою хост-машину (Xubuntu 13.04), поэтому мне сообщают, когда я получаю электронную почту или IM (я уже пробовал RDP, чтобы сделать это, но это неэффективное решение).Как обнаружить изменения в системном трее Windows?

Все, что связано с Linux или сетью, я могу относиться с относительной легкостью, что я не знаю, как это сделать, - как запросить состояние системного трея Windows (или подключить прослушиватель событий для изменений состояния). Мне нравится C++ и Python, но я дам любое жизнеспособное решение.

Дополнительная информация о состоянии будет предпочтительнее, но, как минимум, мне нужно будет обнаружить изменения количества значков в лотке.

ответ

3

В Windows, если вы устанавливаете Visual Studio, среди инструментов Visual Studio есть полезный инструмент под названием «Spy ++», в основном это инструмент, который показывает вам все окна и дает возможность видеть, какое сообщение получает конкретное окно.

enter image description here

Используя этот инструмент, вы можете увидеть, что вся панель, которая содержит ярлыки, лоток, часы и т.д. является «Shell_TrayWnd» кнопку «Пуск». Вы можете использовать меню «Найти» для поиска конкретного окна, просто перетаскивая «цель» в любое окно.

Само окно лотка - «SysPager» (000100D2 на прикрепленном изображении), вы можете регистрировать сообщения для этого окна и видеть, какое именно сообщение получает это окно при получении почты в Outlook.

После этого вы можете написать код, который будет прослушивать все сообщения, которые получает это окно, и исходя из того, что вы видели в «Spy ++», определить, что произошло.

Это только для начала. Написание кода, который получит дескриптор окна и прослушивание сообщений, которые получает окно, является другой частью, но я думаю, что это уже описано в MSDN или даже в StackOverflow. Поиск конкретного дескриптора окна выполняется функцией FindWindowEx, и для прослушивания сообщения вам нужно установить «крючок», который выполняется функцией SetWindowsHookEx. В MSDN довольно хорошо описывается соединение.

+3

«и слушать сообщения, которые получает окно, это еще одна часть, но я думаю, что она уже покрыта в MSDN или даже в StackOverflow», но это вопрос *. Ваш ответ дает надежду, что это возможно, но ИМО не отвечает на вопрос. –

Смежные вопросы