PyWinAuto:Click()失败,直到鼠标被物理点击

时间:2018-06-04 14:03:19

标签: python pywinauto

我试图让PyWinAuto在启用后立即点击按钮。这是我现在拥有的:

while running:
        try:
            app = pywinauto.Application().connect(title='Microsoft Outlook', class_name="#32770")['Microsoft Outlook']
            app.Allow.Wait('ready', retry_interval=0.1)
            app.Allow.Click()
            print('Clicked')


        except (pywinauto.findbestmatch.MatchError, pywinauto.findwindows.ElementNotFoundError):
            time.sleep(0.1)
            pass

如果我在按钮处于活动状态后开始运行,单击并按预期打印“单击”,则此功能正常。如果我在按钮处于活动状态之前运行它,它会按预期等待它,然后似乎尝试并单击它 - 重复打印'单击',直到我单击鼠标按钮或按回车键。如果我取出click()并让它返回app.Allow然后结果是预期的,无论我何时加载脚本,所以它似乎是click(),这是挂断。

无论我点击的位置或我活动的哪个窗口,行为都是一样的 - 如果我点击任何地方或任何东西它会起作用,但是在我做之前它根本不会做任何事情......这会使对象失败自动化,真的!

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,如果使用.connect(...),则必须以管理员身份运行脚本。当目标进程具有更高权限时,我已经在.click()方法中添加了有关该错误和错误的警告。见pull request #499。它将包含在即将发布的pywinauto == 0.6.5。

还有一种方法:.click_input()移动鼠标光标并执行实际点击。虽然.click()只发送WM_CLICK窗口消息(可能对最小化或非活动窗口有用)。

P.S。顺便说一句,对于Outlook,我建议使用Application(backend="uia")并且您没有Win32 API特定的问题。有关后端差异,请参阅Getting Started Guide