我试图让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(),这是挂断。
无论我点击的位置或我活动的哪个窗口,行为都是一样的 - 如果我点击任何地方或任何东西它会起作用,但是在我做之前它根本不会做任何事情......这会使对象失败自动化,真的!
有什么想法吗?
谢谢!
答案 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。