Нажмите значок в системном трее Python Win32
Окружающая среда: я использую Python 2.7 (32-разрядная версия) в Windows 7 64-разрядная версия. Я использую Win32 Api, чтобы сделать инструмент автоматизации Windows (я знаю, что некоторые существуют, но я делаю свой собственный).
Проблема: я застрял в системном трее Windows (область уведомлений), я получил доступ к панели инструментов и смог использовать TB_GETBUTTON для получения информации о кнопках панели инструментов, но у меня возникли проблемы с двумя вещами:
1) Как щелкнуть левой / правой кнопкой мыши значок в области уведомлений? Есть ли способ сделать это, отправив сообщение на ручку панели инструментов, или мне нужно, чтобы получить позицию и отправить клик. Если это последний случай, как я могу получить точное положение значка относительно экрана? (GetRect не помогает, он возвращает top = 0 и left = 2, что не относительно экрана).
2) Как я могу получить доступ к скрытым значкам в уведомлении, я могу нажать кнопку, чтобы открыть меню, но я не знаю, как получить доступ к значкам / кнопкам, например, "щелкнуть правой кнопкой мыши" значок и вызвать их контекстное меню и пройти через него.
Любая помощь с благодарностью. Спасибо!
1 ответ
После моих исследований я не смог отправить сообщение о клике на иконку в системном трее, по крайней мере, через любой API, который я пробовал. Лучший способ сделать это, и вот как я следую, заключается в следующем:
- Вы отправляете сообщение TB_GETBUTTON на панель инструментов.
- Это вернет вам "idCommand" для кнопки, которую вы извлекаете, чтобы вы могли использовать цикл для получения всей "idCommand", которая находится в структуре TBBUTTON.
- С помощью idComman вы можете отправить сообщение кнопке панели инструментов с помощью ручки панели инструментов, чтобы получить размеры значка с сообщением TB_RECT.
- Как только вы узнаете размеры кнопки, вам просто нужно получить размеры панели инструментов, что просто, потому что это всего лишь окно, в котором вы вызываете функцию GetWindowRect
- Последний шаг - теперь вы хотите отправить клик, который вы делаете, вызову win32api.mouse_event, где x означает: левая граница панели инструментов + половина ширины значка, а y: верхняя граница панели инструментов + половина высоты значок (так что вы отправляете клик в центр).