使用 pywinauto 控制非标准 类

Controlling nonstandard classes with pywinauto

我使用 pywinauto 是为了简化我使用某些程序的工作。我想 select 这个 combobox 项目 "vs. Reference"。我使用 app['Setup Potentiodynamic Experiment'].PrintControlIdentifiers() 获取组合框的名称和 class。 Python 返回以下内容:

TComboDJ - 'b'vs. Open Circuit''   (L987, T424, R1094, B445)

'b'TComboDJ5''
'b'vs. Open Circuit3''
'b'vs. Open CircuitTComboDJ3''

所以,为了做我想做的事,我使用了这个:

app['Setup Potentiodynamic Experiment']["TComboDJ5"].Select("vs. Reference")

并出现以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "E:\PY\lib\tkinter\__init__.py", line 1550, in __call__
    return self.func(*args)
  File "E:/Python projects/test/test.py", line 40, in createxp
    app['Setup Potentiodynamic Experiment']["TComboDJ5"].Select("vs. Reference")
  File "E:\PY\lib\site-packages\pywinauto\application.py", line 245, in __getattr__
    return getattr(ctrls[-1], attr)
AttributeError: 'HwndWrapper' object has no attribute 'Select'

据我了解,pywinauto 无法将组合框识别为组合框。可以做些什么吗?

ComboBoxWrapper 可以显式创建:

from pywinauto.controls.win32_controls import ComboBoxWrapper
hwnd_wr = app['Setup Potentiodynamic Experiment']["TComboDJ5"].WrapperObject()
combo = ComboBoxWrapper(hwnd_wr)
combo.Select("vs. Reference")

当然,如果组合框可以响应标准 window 消息(如 CB_GETCOUNT),那当然可以。并且输出告诉您组合的 <title><item_text> 访问名称幸运地可用。