2017-01-16 12 views
1

私はFacTel5と呼ばれる古いWindowsアプリケーションを自動化しようとしています。Windows GUIオートメーションレガシーアプリケーション

私は、ログイン一部が、次のフォームを自動化することができましたが、そのコントロールの弾丸のようなリストであるpywinautoのcontrol_identifiersまたはWindowsが点検しない示す、どちらに

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

私の目標は、リストの1番目の要素をクリックすることです。

inspectPic

私は本当にあなたが提供することができます任意の助けに感謝。

+0

Inspect.exe要素を見ることができない場合は、pywinautoが同様に役立つことはできません。 'group_ctrl.type_keys( '{DOWN 2}')'のようないくつかの回避策だけが役に立ちます。 –

答えて

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') 
関連する問題