Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何右键单击windows任务栏图标并单击Python上下文菜单上的项目?_Python_User Interface_Automation_Pywinauto - Fatal编程技术网

如何右键单击windows任务栏图标并单击Python上下文菜单上的项目?

如何右键单击windows任务栏图标并单击Python上下文菜单上的项目?,python,user-interface,automation,pywinauto,Python,User Interface,Automation,Pywinauto,我需要右键单击Windows通知托盘图标,然后在结果关联菜单上选择(左键单击)其中一项 我已尝试使用,在从页面上的代码运行此代码时: 从pywinauto.application导入应用程序 从pywinauto导入任务栏 # connect to outlook outlook = Application().connect_(process=4436) # click on Outlook's icon taskbar.ClickSystemTrayIcon(12) # Select a

我需要右键单击Windows通知托盘图标,然后在结果关联菜单上选择(左键单击)其中一项

我已尝试使用,在从页面上的代码运行此代码时: 从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
回溯(最近一次呼叫最后一次):
文件“C:\dev\consumertms\temp.py”,第25行,在
任务栏。单击系统TrayIcon(12)
ClickSystemTrayIcon中的第52行文件“C:\Python27\lib\site packages\pywinauto\taskbar.py”
按钮=\获取\可见\按钮\索引(按钮)
文件“C:\Python27\lib\site packages\pywinauto\task.py”,第42行,在“获取可见”按钮索引中
如果不是SystemTrayIcons.GetButton(i).fsState&\
文件“C:\Python27\lib\site packages\pywinauto\controls\common_controls.py”,第1878行,在GetButton中
按钮(IDC命令)
运行时错误:命令id为2的按钮的GetButtonInfo失败
我目前正在运行Windows 8,但需要在Windows XP以后的版本上运行

我已四处搜索,无法找到解决此问题的方法

我的问题:是否有解决此错误的方法?如果没有,是否有其他Python模块可用于自动化此过程?一些代码片段将非常感谢


谢谢

上下文菜单或下拉菜单可以自己作为窗口上下文。 您需要使用findwindows.find_windows()查找它

当我需要访问非本机GUI上的下拉菜单项时,我遇到了这个问题。获取该窗口的类名的最简单方法是使用SWAPY,它列出所有窗口对象并创建方便的pywinauto代码

典型的方法如下所示:

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))

如果你想使UI自动化,你可以使用我需要在Python或者C++中实现这个自动化(我将通过CyType使用)有一个Python的模块,用于MSAA技术的自动化——你将无法在托盘图标上做右键点击(有时甚至左键点击),但您可以获得图标的坐标,然后使用pywinauto的ClickInput方法单击,使用此坐标。不幸的是,我现在没有例子。