原创-使用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的句柄

 

转载于:https://www.cnblogs.com/qkabcd/p/11106075.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值