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



我试图让 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(( 并让它只返回应用程序。允许 然后无论我何时加载脚本,结果都是预期的,所以它似乎是 click(( 挂断。

无论我在哪里单击或我激活了哪个窗口,行为都是相同的 - 如果我单击任何地方或任何东西,它都会起作用,但在我这样做之前它根本不会做任何事情......这真的破坏了自动化的对象!

有什么想法吗?

谢谢!

首先,如果您使用.connect(...),则必须以管理员身份运行脚本。我已经在目标进程具有更高权限时在.click()方法中添加了有关此和错误的警告。请参阅拉取请求 #499。它将被包含在即将到来的pywinauto==0.6.5中。

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

附言顺便说一下,对于Outlook,我建议使用Application(backend="uia"),你不会遇到Win32 API特定的问题。请参阅入门指南,了解后端的区别。

最新更新