旧版应用程序上的Windows GUI自动化

时间:2017-01-16 11:48:36

标签: windows python-3.x user-interface pywinauto

我正在尝试自动化一个名为FacTel5的旧Windows应用程序。

我已经能够自动化登录部分,但是下一个表格是类似子弹的列表,其控件显示,在pywinauto control_identifiers或Windows Inspect上都没有

from pywinauto.application import Application
app = Application(backend="uia").start(r'C:\Factel5\Factel5.exe')

controlAcceso = app.FacTel5['Control de acceso a FacTel5'].GroupBox

user = controlAcceso.child_window(auto_id="4", control_type="Edit")
user.type_keys("userid")

password = controlAcceso.child_window(auto_id="5", control_type="Edit")
password.type_keys("password")

controlAcceso.child_window(title="Aceptar", auto_id="3", control_type="Button").click()

pro = app.process
winApp = Application().connect(process=app.process)

App 使用“uia”后端和 winApp 使用win32后端自动连接。

上面的代码让我看到这个窗口,如果您需要/自己尝试代码,凭证是正确的(并且它们在program manual上定义。)

factelPic

我的目标是点击列表的第一个元素。

inspectPic

我非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

这些控件甚至不会对键盘操作做出反应。所以唯一的解决方案是按坐标点击!但是停下来!这是不可靠的!如果它是绝对屏幕坐标,是的。但我们可能会使用相对坐标(原点是控件的左上角)。如果控制尺寸固定,它可以是可靠的。

此代码适用于Win10 x64:

from pywinauto.application import Application

app = Application(backend="uia").start(cmd_line=r"C:\Program Files (x86)\Factel5\Factel5.exe")
# this main window spec should work even if the subtitle changes
main_window = app.window(title_re=u'FacTel5 - Telef\u0443nica.*')

controlAcceso = main_window['Control de acceso a FacTel5'].GroupBox
user = controlAcceso.Edit1
user.set_text("userid")
password = controlAcceso.Edit2
password.set_text("password")
controlAcceso.child_window(title="Aceptar", control_type="Button").click()

controlAcceso = main_window['Control de acceso a FacTel5'].child_window(title=u'\u0457Qu\u0439 desea hacer?')
# controlAcceso = main_window['Control de acceso a FacTel5'][u'\u0457Qu\u0439 desea hacer?'] # TODO: need a bug fix
rect = controlAcceso.rectangle()
item1 = (rect.width() / 2, int(float(rect.height() * 2.0) / 11.5))
item2 = (rect.width() / 2, int(float(rect.height() * 3.0) / 11.5))
item3 = (rect.width() / 2, int(float(rect.height() * 4.0) / 11.5))
item4 = (rect.width() / 2, int(float(rect.height() * 5.0) / 11.5))
item5 = (rect.width() / 2, int(float(rect.height() * 6.0) / 11.5))

item6 = (rect.width() / 2, int(float(rect.height() * 8.5) / 11.5))
item7 = (rect.width() / 2, int(float(rect.height() * 9.0) / 11.5))
item8_exit = (rect.width() / 2, int(float(rect.height() * 10.0) / 11.5))

# uncomment move_mouse and comment click_input to see where the click happens
# controlAcceso.move_mouse_input(coords=item1, absolute=False)
controlAcceso.click_input(coords=item1, absolute=False)

main_window.menu_select(u'Facturaciones->Gestión de facturaciones')