Ui automation 为什么pywinauto发送的右键单击不会改变informatica中灰色连接按钮的状态,但真正的鼠标按钮单击会改变?

Ui automation 为什么pywinauto发送的右键单击不会改变informatica中灰色连接按钮的状态,但真正的鼠标按钮单击会改变?,ui-automation,informatica-powercenter,pywinauto,Ui Automation,Informatica Powercenter,Pywinauto,我正在尝试使用pywinauto编写脚本,以在Informatica powercenter workflow manager(v9.6.1)中打开存储库 在执行了下面的几行之后,我得到了带有连接选项的上下文菜单,如屏幕截图所示。还要注意工具栏上的“连接”按钮保持灰色。如果我使用实际的鼠标并单击要连接到的存储库的treeview项目,则connect按钮将变为绿色并启用。但当pywinauto发送右键单击时不会 from pywinauto.application import Applicat

我正在尝试使用pywinauto编写脚本,以在Informatica powercenter workflow manager(v9.6.1)中打开存储库

在执行了下面的几行之后,我得到了带有连接选项的上下文菜单,如屏幕截图所示。还要注意工具栏上的“连接”按钮保持灰色。如果我使用实际的鼠标并单击要连接到的存储库的treeview项目,则connect按钮将变为绿色并启用。但当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')

我尝试使用SendKeys发送“c”,后跟{ENTER},它只是返回而不做任何操作。此外,如果我使用在上述pywinauto步骤运行后生成的右键单击上下文菜单上的实际键盘,当我按c时,它会选择连接菜单,但当我按Enter时,它什么也不做。我认为连接功能没有启用。 我不知道应用程序是否需要任何其他输入来启用它。我还尝试使用
informaticaworkflowmanager.MenuItem(u'&Repository->&Connect…)
选项,但没有效果-它说它被禁用了


欢迎任何帮助pywinauto打开存储库的指针

只是总结一下评论


  • 首先尝试以管理员身份运行脚本。如果没有帮助,请使用方法
    单击输入()。它像用户一样运行真正的点击。方法
    click()
    发送
    WM\u click
    BM\u click
    ,这可能不是应用程序在灰色按钮状态下处理的


  • 如果以管理员身份运行脚本,默认情况下,它应该继承子进程的权限。方法
    start()
    中没有特殊标志,因为如果目标应用程序进程具有更高的权限,某些函数可能无法工作。无论如何,提升通常需要用户的确认,而此安全确认对话框不能由OS设计自动执行(即使带有硬编码坐标的
    单击输入()
    也无法在显示此对话框时工作,我刚才检查过)


  • 首先尝试以管理员身份运行脚本。如果没有帮助,请使用方法click\u input()。它像用户一样运行真正的点击。方法click()发送WM_click或BM_click,这可能不是应用程序在灰色按钮状态下处理的。@VasilyRyabov谢谢!单击输入()有效。如果愿意,您可以添加答案。同样感谢你向我介绍整个GUI自动化的事情,最近几天我读到了类似的框架(sikuli等),这就像打开了一个全新的生产力世界。我真不敢相信没有人会经常谈论这些@VasilyRyabov我现在陷入另一个问题,可能它需要管理员权限。如何以管理员身份运行应用程序().Start()?如果以管理员身份运行脚本,默认情况下它应该继承子进程的权限。方法
    start()
    中没有特殊标志,因为如果目标应用程序进程具有更高的权限,某些函数可能无法工作。无论如何,提升通常需要用户的确认,操作系统设计无法自动完成此安全确认对话框。