如何摆脱 double_click_input() 行动的延迟?

How to get rid of delays on double_click_input() actions?

有什么方法可以消除 double_click_input() 操作的延迟?

我想做的是双击编辑框,然后在此处键入密钥。可能这两个动作都有一些延迟,所以整个过程执行起来很慢。

代码:

myApp = Desktop(backend='uia').window(title_re='myTitle_re')    
myApp.window(auto_id='myAutoId').window(title='myTitle').double_click_input()
myApp.descendants(title='myTitle', control_type='Edit')[1].type_keys('myKeys')

还有一个问题:我尝试在这里使用 double_click(),但它总是抛出异常:

AttributeError: WindowSpecification class has no 'double_click' method.

然后我试了myApp.window(auto_id='myAutoId').window(title='myTitle').wrapper_object().double_click()

并得到:

AttributeError: 'ListItemWrapper' object has no attribute 'double_click'

我应该更改什么才能完成这项工作?

我正在使用 pywinauto 0.6.3。

回答您的第一个问题,您可以使用全局设置将一些计时设置为空。对于 double_click_input:

from pywinauto.timings import Timings
Timings.after_clickinput_wait = 0.0
Timings.after_setcursorpos_wait = 0.0

对于真实的用户输入(*_input 方法),更改时间可能会导致修改后的序列不起作用。但是您可以自行承担风险进行试验。有时最好使用静默方法,使用 window 消息,如 WM_CLICK(对于 "win32" 后端)或 UIAutomation 模式,如 Invoke Pattern(对于 "uia" 后端)。

double_click 未针对 "uia" 实现,因为不清楚应将哪个 UIAutomation 模式解释为双击操作。我们有方法 .invoke()ButtonWrapper.click = invoke 别名。但是对于非按钮 InvokePattern 可能有不同的含义。这就是为什么我们将其保留为 .invoke().

P.S。关于遗留 属性 文本...它可以通过 .legacy_properties()[u'Value'] 为您的案例(或返回的字典中的其他值)获得。有使用 ValuePattern 的方法set_window_text/set_edit_text,因此可以在没有任何技巧的情况下静默设置文本。