PyWinAuto+Pyauotgui实现Windows自动化操作

PyWinAuto+Pyauotgui实现Windows自动化操作

目前有操作Java开发的桌面程序的需求,PyWinAuto对于Java自绘图的无法读取到菜单,只能获取到窗口,则思路为使用PyWinAtuo打开窗口,使用Pyautoui进行目标操作

PyWinAuto

通过inspect.exe 查看窗口信息

image-20231130100041736

ClassNameName可用于查找窗口

1
2
3
4
5
# 寻找类名为SunAwtFrame,标题带有buffer的窗口所在进程
app = Application(backend='win32').connect(class_name='SunAwtFrame', title_re=".*buffer.*")
# 特定窗口
# 当有多个满足条件的进程或窗口时会报错!!!
dlg = app.window(title_re=".*buffer.*")
  • 最大化 :w.maximize()
  • 最小化 :w.minimize()
  • 恢复正常 :w.restore()
  • 关闭窗口:w.close()
  • 获取窗口状态:w.get_show_state() 返回1 最大化, 0正常,2最小化
  • 获取窗口坐标:w.rectangle() 返回 (L35, T149, R1544, B913)

Pyautogui

对于Java自绘图的,pywinauto无法找到菜单等空间,则只用pyautogui进行图形模拟的操作

常用,点击pyautogui.click(x=x+w//2, y=y+h//2, clicks=1, interval=1, button='left')

图形定位:x, y, w, h = pyautogui.locateOnScreen(PIL.Image.open(os.path.join(self.path, img + '.png')), True, confidence=0.8)

备注: 如果使用confidence参数则需要安装OpenCV库,同时可能出现[Don't understand error reading improper permissions](https://stackoverflow.com/questions/59604926/dont-understand-error-reading-improper-permissions)的报错,则使用cv2或者PIL库打开再传入即可,具体宽容度需要测试设置,过小很容易出发误操作

要设置操作延时:pyautogui.PAUSE = 1.5,过快容易出错

参考

  1. pyatuogui教程