2014-02-11 3 views
0

Окружающая среда: Я использую Python 2.7 (32-разрядная версия) для Windows 7 64-бит. Я использую win32 Api для создания инструмента автоматизации Windows (я знаю, что есть некоторые, которые существуют, но я делаю свои собственные).Щелкните значок системного лотка Python Win32

Проблема: я застрял на окнах System Tray (Область уведомлений), я получаю доступ к панели инструментов, и я в состоянии использовать TB_GETBUTTON, чтобы получить информацию кнопки на панель инструментов, но у меня проблема с двумя вещами:

1) Как мне оставить/щелкните правой кнопкой мыши значок в лотке уведомлений? Есть ли способ сделать это, отправив сообщение в дескриптор панели инструментов, или мне нужно получить позицию и отправить клик. Если это последний случай, как мне получить точное положение значка относительно экрана? (GetRect не помогает ему возвращает top = 0 и left = 2, который не относится к экрану).

2) Как я могу получить доступ к скрытым значкам в уведомлении, я могу нажать кнопку, чтобы открыть меню, но я не знаю, как получить доступ к значкам/кнопкам, например, «щелкнуть правой кнопкой мыши» значок и вывести их контекстное меню и пройти через него.

Любая помощь очень ценится. Спасибо!

+0

Для этого не существует поддерживаемого механизма. Подробно о реализации, возможно, вы можете использовать 'TB_GETBUTTON'. Для этого нет никакой поддержки системы. Если вы хотите увидеть скрытые кнопки, подделайте клик по кнопке '<<'. Но не ожидайте поддержки от системы здесь. Он не хочет, чтобы вы это делали. –

+0

@DavidHeffernan Спасибо за ответ! Что именно я могу и не могу сделать? Можете ли вы уточнить, что возможно, а что нет, потому что мой вопрос состоял из нескольких частей. – TheCodingGent

+0

Ничего из этого не возможно через поддерживаемые API. Это все взломать. Лучшее, что вы можете сделать, это подделка ввода. –

ответ

0

После моего исследования нет способа отправить сообщение клика на значок в системном трее, по крайней мере, не через какой-либо API, который я пробовал. Лучший способ сделать это, и это путь, я следую является следующее:

  1. Вы Отправить сообщение TB_GETBUTTON на панели инструментов.
  2. Это приведет к появлению «idCommand» для кнопки, которую вы извлекаете, чтобы вы могли использовать цикл для получения всей «idCommand», которая находится в структуре TBBUTTON.
  3. С idComman вы можете отправить сообщение на кнопку панели инструментов с помощью ручки панели инструментов, чтобы получить размеры значка с сообщением TB_RECT.
  4. После того, как вы знаете размеры кнопки вам просто нужно, чтобы получить размеры панели инструментов, который является простым, потому что это просто окно вы делаете кал на GetWindowRect
  5. Последний шаг теперь вы хотите, чтобы отправить кнопку вы делаете вызов win32api.mouse_event с x: левая граница панели инструментов + половина ширины значка и y: верхняя граница панели инструментов + половина высоты значка. (так что вы отправляете клик в центр).
Смежные вопросы