需求: 启动同一个window软件N多次。
工具: spy++ 使用步骤
操作之前,需要先获取到软件的窗口句柄(主窗口)。
在写代码之前,一定要使用spy++工具弄清楚软件控件之间的tree关系。想要定位一个控件,需要先定位到它的父控件,如果父控件还有父控件,就再定位父父控件,直到定位的父控件处于主窗口控件之下, 否则根本定位不到。一定要使用spy++工具,否则肉眼看见的同一类型且相似功能的控件可能不一定处于同一层次,也就无法根据相同的父控件定位到。(控件也叫子窗口)
import win32con
import win32gui
import win32api
# 主窗口 使用FindWindow来查找主窗口
handle = win32gui.FindWindow(窗体类名, 窗口标题)
# 子窗口 使用FindWindowEx来查找子窗口
# 参数: 父控件,0, 类名, 标题
# 找到标题为设置中心的按钮控件
bhandle = win32gui.FindWindowEx(handle, 0, "Button", "设置中心")
# 子子窗口 在设置中心的窗口下的控件(相对主窗口来说)
# 找到类名是Edit的输入框控件,控件中没有标题(内容/提示)
input_handle = win32gui.FindWindowEx(bhandle, 0, 'Edit', "")
# 填充输入框 (文件选择框也可以使用该方法填充,message替换为filepath)
message = 'hello world'
win32api.SendMessage(input_handle, win32con.WM_SETTEXT, 0, message)
# 定位到启动服务按钮控件
start_server_button = win32gui.FindWindowEx(bhandle, 0, 'Button', "启动服务")
# 鼠标左单击
win32gui.PostMessage(start_server_button, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, 0)
win32gui.PostMessage(start_server_button, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, 0)
# 如果你不确定你定位到的是什么控件,可以使用下面两个方法获得当前控件的类名和标题
# 类名
class_name = win32gui.GetClassName(handle)
# 标题
title =win32gui.GetWindowText(handle)
对于操作软件,输入和点击已经够用了,如果还需要别的操作请自行查找方法。
资料链接 1. FindWindow和FindWindowEx区别
网友评论