我需要右键单击Windows通知托盘图标,然后在生成的上下文菜单中选择(左键单击)其中一个项目。
我尝试使用pywinauto,并在How To's页面上的代码中运行此代码时: 来自pywinauto.application import应用程序 来自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 :(得分:2)
上下文菜单或下拉菜单可以是它自己的窗口上下文。 您需要使用 findwindows.find_windows()找到它。
当我需要访问非本机GUI上的下拉菜单项时,我遇到了这个问题。获取窗口类名的最简单方法是使用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))