2014-01-23 3 views
3

Мне нужно щелкнуть правой кнопкой мыши значок значка Windows Notification Tray и выбрать (щелкнуть левой кнопкой мыши) один из элементов в появившемся контекстном меню.Как щелкнуть правой кнопкой мыши по значку в панели Windows и щелкнуть элемент в контекстном меню на Python?

Я пытался использовать pywinauto, и во время выполнения этого кода из кода на странице: How To's из pywinauto.application импорта Применение из pywinauto импорта задач

# connect to outlook 
outlook = Application().connect_(process=4436) 

# click on Outlook's icon 
taskbar.ClickSystemTrayIcon(12) 

# Select an item in the popup menu 
outlook.PopupMenu.MenuClick("Cancel Server Request") 

Я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "C:\dev\consumertms\temp.py", line 25, in <module> 
    taskbar.ClickSystemTrayIcon(12) 
    File "C:\Python27\lib\site-packages\pywinauto\taskbar.py", line 52, in ClickSystemTrayIcon 
    button = _get_visible_button_index(button) 
    File "C:\Python27\lib\site-packages\pywinauto\taskbar.py", line 42, in _get_visible_button_index 
    if not SystemTrayIcons.GetButton(i).fsState & \ 
    File "C:\Python27\lib\site-packages\pywinauto\controls\common_controls.py", line 1878, in GetButton 
    button.idCommand) 
RuntimeError: GetButtonInfo failed for button with command id 2 

В настоящее время я работаю Windows 8, но для этого потребуется запустить Windows XP.

Я искал вокруг и не смог найти обходной путь для этого.

Мой вопрос: Есть ли обходной путь для этой ошибки? Если нет, есть ли другой модуль Python, который я могу использовать для автоматизации этого процесса? Некоторые фрагменты кода будут очень оценены.

Благодаря

+0

Если вы хотите автоматизировать UI вещи, которые вы можете использовать [AutoIt] (http://www.autoitscript.com/site/autoit/) – User

+0

мне нужно для автоматизации этого в Python или C++ (который я буду использовать через ctypes) – heavenslife

+0

Существует модуль python для автоматизации с технологией MSAA - https://github.com/phuslu/pyMSAA. Вы не сможете сделать правый щелчок (иногда даже щелкните левой кнопкой мыши) на значках в лотке, но вы можете получить координаты значка, а затем щелкнуть по методу ClickInput pywinauto, используя эти координаты. К сожалению, сейчас у меня нет примеров. – SWAPYAutomation

ответ

2

контекстного меню или раскрывающееся меню может быть контекст окна на его собственном. Вам нужно будет найти его с помощью findwindows.find_windows().

Я столкнулся с этой проблемой, когда мне нужно было получить доступ к выпадающим меню в неродном графическом интерфейсе. Самый простой способ получить имя класса для этих окон - это использование SWAPY, в котором перечислены все объекты окна и создается удобный код pywinauto https://code.google.com/p/swapy/.

Типичный подход будет выглядеть так:

outlook = Application().connect_(process=4436) 
taskbar.ClickSystemTrayIcon(12) 

# Use SWAPY to find the class name of the popup menu 
w_handle = findwindows.find_windows(title=u'', class_name='name-found-in-SWAPY')[0] 
popup = app.window_(handle=w_handle) 
popup.Click(coords=(x,y))