原创-使用pywinauto和swapy-ob-0.4.3进行dotnet的winform程序控制(二)
作者:互联网
上一篇讲到用winspy++这个工具分析dotnet的winform的程序,再使用pywinauto控制。这篇我加入了自动分析工具swapy-ob-0.4.3,辅助进行分析。
首先启动winform程序
然后再启动swapy
出现??的原因是swapy这个程序对中文unicode不支持显示
右击Form1,选择Click
生成了Form1的代码
拷贝右侧的代码,试着运行
import pywinauto pwa_app = pywinauto.application.Application() w_handle = pywinauto.findwindows.find_windows(title=u'Form1', class_name='WindowsForms10.Window.8.app.0.141b42a_r16_ad1')[0] window = pwa_app.window_(handle=w_handle) window.Click()
输出如下提示:
E:\py\autogui>python swaptest.py swaptest.py:5: DeprecationWarning: Method .window_() is deprecated, use .window( ) instead. window = pwa_app.window_(handle=w_handle) Traceback (most recent call last): File "swaptest.py", line 5, in <module> window = pwa_app.window_(handle=w_handle) File "C:\Python37-32\lib\site-packages\pywinauto\__init__.py", line 50, in wra p return method(*args, **kwargs) File "C:\Python37-32\lib\site-packages\pywinauto\application.py", line 1203, i n window raise AppNotConnected("Please use start or connect before trying " pywinauto.application.AppNotConnected: Please use start or connect before trying anything else
提示是说未启动程序导致,顺便也点击Form1下的控件
点击Edit3的右键click生成代码
ctrl = window['3']
ctrl.Click()
这个目的是为了获取控件的访问id,进行了改造代码如下:
import pywinauto pwa_app = pywinauto.application.Application().start("WindowsFormsInput.exe") w_handle = pywinauto.findwindows.find_windows(title=u'Form1', class_name='WindowsForms10.Window.8.app.0.141b42a_r16_ad1')[0] window = pwa_app.window_(handle=w_handle) ctrl = window['3'] ctrl.type_keys(r"E:\py\autogui\ce.png")
运行代码后的效果是,打开了程序,但控制台报错:
在不关闭winfom下,再次运行这个脚本,这次成功了。
也就是证明这种方式的调用dotnet的winform,dotnet在首次展示窗口前,存在一定的延时。所以导致
w_handle = pywinauto.findwindows.find_windows(title=u'Form1', class_name='WindowsForms10.Window.8.app.0.141b42a_r16_ad1')[0]
获取不到程序句柄数组。于是我加入了延时语句,改造如下:
import pywinauto,time pwa_app = pywinauto.application.Application().start("WindowsFormsInput.exe") time.sleep( 0.1 ) w_handle = pywinauto.findwindows.find_windows(title=u'Form1', class_name='WindowsForms10.Window.8.app.0.141b42a_r16_ad1')[0] window = pwa_app.window(handle=w_handle) ctrl = window['3'] ctrl.type_keys(r"E:\py\autogui\ce.png") window[u'设置'].click()
效果如下:
总结:采用swapy生成的运行代码的机制,运行dotnet的winform时,要加入一定的延时,让加载winform的ui后,才能获取到winform的句柄
标签:handle,pywinauto,app,py,ob,0.4,window,pwa 来源: https://www.cnblogs.com/qkabcd/p/11106075.html