为什么从pywinauto发送的右击不会改变informatica中灰色连接按钮的状态,但是真正的鼠标按钮点击会发生什么?

问题描述:

我想写使用pywinauto来打开的Informatica的PowerCenter工作流管理器(v9.6.1)为什么从pywinauto发送的右击不会改变informatica中灰色连接按钮的状态,但是真正的鼠标按钮点击会发生什么?

存储库下面的行执行后,我获得与连接选项的上下文菜单,如屏幕截图的脚本。另请注意,工具栏上的“连接”按钮保持灰显状态。如果我使用实际的鼠标并单击要连接的存储库的树形视图项目,则连接按钮变为绿色并启用。但是,当pywinauto发送右键点击时不行。

from pywinauto.application import Application 
from pywinauto.keyboard import SendKeys 
import time 

app = Application().Start(cmd_line=r'C:\PowerCenterClient\client\bin\pmwflmgr.exe') 
informaticaworkflowmanager = app[u'Informatica::WorkflowManager'] 
informaticaworkflowmanager.Wait('ready') 
time.sleep(2) 
systreeview = informaticaworkflowmanager[u'TreeView'] 
tree_item = systreeview.GetItem([u'Repositories', u'REP']) 
tree_item.Select() 
tree_item.Click(button='right',double=True,where='icon') 

enter image description here

我试着使用的SendKeys发送 'C' 后面{} ENTER,它只是返回而不做任何事情。另外,如果我在上述pywinauto步骤运行后生成的右键单击上下文菜单中使用实际的键盘 - 当我按c键时,它会选择连接菜单,但按Enter键时它不会执行任何操作。我认为连接功能没有启用。 如果应用程序需要其他任何输入来启用它,我毫无头绪。我也尝试使用informaticaworkflowmanager.MenuItem(u'&Repository->&Connect...')选项,但无济于事 - 它说它被禁用。

欢迎任何帮助pywinauto打开仓库的指针!

+1

首先尝试以管理员身份运行脚本。如果它没有帮助,请使用方法click_input()。它像用户一样运行真正的点击。方法click()发送WM_CLICK或BM_CLICK,这可能不是由应用程序以灰色按钮状态处理的。 –

+0

@VasilyRyabov谢谢! click_input()工作。如果您愿意,可以添加答案。也感谢向我介绍整个GUI自动化的事情,过去几天我正在阅读类似的框架(sikuli等),这就像打开了一个全新的生产力世界。我不敢相信没有人更频繁地谈论这些问题! – dbza

+0

@VasilyRyabov我被困在另一个问题现在可能它需要管理员权限。如何运行应用程序()。以管理员身份启动()? – dbza

就总结这些意见...

  1. 首先尝试运行脚本管理员。如果没有帮助,请使用方法click_input()。它像用户一样运行真正的点击。方法click()发送WM_CLICKBM_CLICK这可能不是由处于灰色按钮状态的应用程序处理。

  2. 如果以管理员身份运行脚本,则默认应该继承子进程的权限。方法start()中没有特殊标志,因为如果目标应用程序进程具有较高权限,某些功能可能无法正常工作。无论如何,提升通常需要用户确认,而且此安全确认对话框不能通过操作系统设计实现自动化(即使click_input()硬编码坐标在显示此对话框时也不起作用,前一段时间我已对其进行了检查)。