Python PyWinAuto:Click()在实际单击鼠标之前失败

Python PyWinAuto:Click()在实际单击鼠标之前失败,python,pywinauto,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)

我正在尝试让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
如果我在按钮处于活动状态后开始运行,并按预期单击并打印“已单击”,则效果很好。如果我在按钮激活之前运行它,它会按预期等待它,然后似乎尝试单击它-重复打印“单击”,直到我单击鼠标按钮或按enter键。如果我取出click()并让它返回app.Allow,那么无论何时加载脚本,结果都是预期的,所以这似乎是click()的问题

无论我在何处单击或激活了哪个窗口,行为都是相同的-如果我单击任何地方或任何东西,它都会工作,但在我单击之前它不会做任何事情。。。这真的破坏了自动化的目标

有什么想法吗


谢谢

如果使用
.connect(…)
,首先必须以管理员身份运行脚本。我已经在
.click()
方法中添加了关于这一点和错误的警告,当目标进程具有更高权限时。看见它将包含在未来的pywinauto==0.6.5中

还有一种方法:
。单击输入()
移动鼠标光标并执行真正的单击。而
.click()
只发送
WM\u click
窗口消息(可能对最小化或非活动窗口有用)


另外,对于Outlook,我建议您使用
应用程序(backend=“uia”)
,这样您就不会遇到Win32 API特定的问题。看看后端的区别。

为瓦西里干杯,但我并没有前进太多。我以管理员的身份运行了该脚本,我看到了相同的症状,我故意使用w32后端-虽然该提示符被标记为“Microsoft Outlook”,但它不包含在Outlook本身中,而且它是一个旧的提示符,我正在尝试单击它。单击输入()在最小化或非活动窗口上根本不起作用,是吗?这是我改用click()方法的主要原因。是的,click\u input()需要活动窗口。根本原因可能在应用程序端的WM_CLICK消息处理程序中。作为一种解决方法,您可以在.click()之前尝试.send_chars(“{ENTER}”)。send_chars/type_键的区别与click/click_输入的区别相同。尝试了send_chars解决方法后,仍然没有骰子-即使使用{ENTER}输入,它一直粘住,直到我在前进之前单击为止。奇怪的不过,谢谢你的想法,我可能会看看我是否可以将其考虑到另一种方法中。无论如何,这是明天的工作。我指的不是WM_LBUTTONDOWN/WM_CLICK处理程序本身,而是启用此处理程序的代码。它可能会在触发后运行。这可能是应用程序问题/bug吗?