环境:python 3.11.0, pywinauto 0.6.8
辅助工具:inspect,MicrosoftSpy++,ViewWizard 3.5.3
import pywinauto
import time
import re
import win32gui
import win32clipboard as w
import win32con
import win32api
from pywinauto.keyboard import send_keys
def getWindowsNameStr(): #获取现有所有的窗口名称
'''获取现有所有的窗口名称
return:字符串格式返回所有窗口的名称
'''
windowsHandles = app.windows()
WindowsName = []
for i in range(StartWindowsNum):
WindowsName.append(windowsHandles[i].window_text())
# print(WindowsName)
WindowsNameStr = ''.join(WindowsName)
return WindowsNameStr
def getText(): #读取剪切板
'''读取剪切板
return:剪切板文字
'''
w.OpenClipboard()
d = w.GetClipboardData(win32con.CF_UNICODETEXT)
w.CloseClipboard()
return d
def setText(aString): #把文字写入剪切板
'''把文字写入剪切板
'''
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString) #CF_UNICODETEXT 能返回全部,CF_TEXT只能返回首字母,奇怪
w.CloseClipboard()
def ConnectDUT(expectResult='Ready for Memtool Command'): #connect产品,并判定是否连接成功
'''烧录器连接产品并判定是否连接成功,若连接失败则关闭烧录程序主进程
return: 如果打开ok,返回1;否则返回0
'''
try:
dlg_main = app.window(title_re=r'Infineon - .*') #重新获取主窗口的ID
# dlg_main.print_control_identifiers()
# 点击connect按键 Controller0.Core0 - Can't establish Connection to Target
hwnd=dlg_main.handle
# 设置窗口可见 最上层
win32gui.ShowWindow(hwnd,1)
time.sleep(0.01)
dlg_main.child_window(title="Connect", class_name="Button").click_input()
# 循环获取连接结果
# Edit3 = dlg_main['Edit3']
# Edit3Value = Edit3.text_block()
# print("Connect Status:",Edit3Value)
Edit3Value = ''
i = 0
while((i <= 20)&(expectResult not in Edit3Value)):
Edit3 = dlg_main['Static2']
Edit3Value = Edit3.window_text()
i = i+1
time.sleep(0.2)
print(i,Edit3Value)
# dlg_main.print_control_identifiers()
except Exception as e: #连接报错退出程序
print(e)
dlg_main.close()
WindowsNameStr3 = getWindowsNameStr() #重新遍历窗口
if re.findall(r"Can't establish Connection to Target.*", WindowsNameStr3): # 判定是否有连接失败窗口,关闭此窗口
dlg_ConnectErr = app.window(title_re=r".*Can't establish Connection to Target.*") #重新获取连接错误窗口的ID
dlg_ConnectErr['E&xit'].click_input()
if(expectResult in Edit3Value):
return 1
else:
print("Connect Status:",Edit3Value)
return 0
程序未完
自动化处理关键方法:
1.*.print_control_identifiers() 获取*的所有的组件,然后查取对应的操作方法
2.有一些需要模拟键盘输入的部分高效的处理方法:黏贴处理