无法访问pywinauto的hwndwrapper(包装类)中的windows控件

2024-05-20 11:00:14 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here我不熟悉python和pywinauto。正在尝试为文本框(windows控件)设置或获取文本pywinauto.controls.hwndwrapper.hwndwrapper通过使用SWAPY,我得到了包装类的类名。如何在pywinauto中使用类名(比如Afx:633C0000:1008)访问包装类中的控件?在

import pywinauto
import pywinauto.controls
from pywinauto.application import Application
app = Application().Connect(title=u'SAP', class_name='SAP_FRONTEND_SESSION')
sapfrontendsession = app.SAP
afxe = sapfrontendsession[u'Afx:633C0000:1008']

Tags: imageimportapphereapplicationdescription控件sap
1条回答
网友
1楼 · 发布于 2024-05-20 11:00:14

pywinauto提供了一个基于WindowSpecification和包装器的2级概念。窗口规范只是一个描述,一组搜索所需控件的条件(当创建WindowSpecification时,它可能不存在)。如果找到,则为实际存在的控件创建具体的包装器。在空闲控制台中,它看起来是这样的:

>>> app.RowListSampleApplication
<pywinauto.application.WindowSpecification object at 0x0000000003859B38>
>>> app.RowListSampleApplication.WrapperObject()
<pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004ADF780>

窗口规范不能超过2个级别:app.WindowName.ControlName。可以使用更详细的搜索条件指定它:

^{pr2}$

可能的Window_/ChildWindow参数与find_windows中列出的参数相同。在


很好的Python特性可以在生产代码中隐藏WrapperObject()方法调用,因此您只需要调用它来进行调试。例如,这些语句是等价的(执行相同的操作):

app.WindowName.Edit.SetText(u'text')
app.WindowName.Edit.WrapperObject().SetText(u'text')

但下面的语句返回不同的对象:

app.WindowName.Edit # <WindowSpecification>
app.WindowName.Edit.WrapperObject() # <EditWrapper>

相关问题 更多 >