pip install pywinauto
示例
Application单进程
Desktop多进程
3中的下载连接
链接
点击放大镜拖到对应位置即可
from pywinauto.application import Application
# 打开指定的程序
### 1、打开自带的记事本
app = Application(backend="uia").start("notepad.exe")
### 2、 打开qq r为转义符
app = Application(backend="uia").start(r"D:\qq\Bin\QQScLauncher.exe")
拖着放大镜到打开的应用上就可以看到信息
每次打开都会改变的
from pywinauto.application import Application
if __name__ == '__main__':
# 通过进程号进行连接
# app = Application("uia").connect(process=16264)
# print(app)
# 通过窗口句柄进行连接
app = Application("uia").connect(handle=265004)
print(app)
ps注意这里win32打不开就去换成uia
from pywinauto.application import Application
if __name__ == '__main__':
# 启动qq
app = Application("win32").start(r"D:\qq\Bin\QQ.exe")
# 方式一 app[类名/标题] 推荐
# 使用类名选择窗口
dlg = app["TXGuiFoundation"]
# 通过窗口标题
# dlg = app["QQ"]
# 方式二 app.类名
# dlg = app.TXGuiFoundation
# 打印窗口所有的控件
dlg.print_control_identifiers()
from pywinauto.application import Application
if __name__ == '__main__':
# 启动qq
app = Application("win32").start(r"D:\qq\Bin\QQ.exe")
# 方式一 app[类名/标题] 推荐
# 使用类名选择窗口
# dlg = app["TXGuiFoundation"]
# 通过窗口标题
# dlg = app["QQ"]
# 方式二 app.类名
dlg = app.TXGuiFoundation
# 打印窗口所有的控件
dlg.print_control_identifiers()
# 窗口最大化
dlg.maximize()
# 窗口最小化 就是窗口的-的意思 qq最小化托盘
dlg.minimize()
#恢复
dlg.restore()
# 获取窗口状态
state = dlg.get_show_state()
# 坐标
rect = dlg.rectangle()
# 关闭窗口
dlg.close()
下面是坐标
上述的资料我没了解太多,万事开头难,上去就给我报了太多错就不看他们的资料学习了,这里换了一套看着比较简单
鼠标停留在任务栏中
from pywinauto.findwindows import find_elements
if __name__ == '__main__':
# 查看当前窗口都有哪些可选中 或者替换为win32
wins = find_elements(backend="uia")
print(wins)
注意要把微信移到最前面并且不能动鼠标
from pywinauto import Application
if __name__ == '__main__':
app = Application(backend="uia").connect(title_re="微信")
# 查看窗口的对话框
dlgs = app.windows()
print(dlgs)
# 进入对话框
dlg = app.window(title="微信")
# 找到对应文字
btn = dlg['仅传输文件']
# 点击事件
btn.click_input()
btn.draw_outline(colour='red')
from pywinauto import Application
if __name__ == '__main__':
app = Application(backend="uia").connect(title_re="微信")
# 进入对话框
dlg = app.window(title="微信")
# 找到对应文字
btn = dlg['登录']
btn.draw_outline(colour='red')
# 点击事件
# btn.click_input()
from pywinauto.application import Application
if __name__ == '__main__':
app = Application(backend="uia").connect(title_re="微信")
# 进入对话框
dlg = app.window(title="微信")
# 让微信还原到界面上
dlg.restore()
# 根据条件去匹配find_elements()函数中查看都有哪些字典值 dlg["设置及其他"]
# btn = dlg["设置及其他"]
kwargs = {"title":"设置及其他"}
btn = dlg.child_window(**kwargs)
# 红圈
btn.draw_outline(colour='red')
由于现在1、中的这个设置会点击才可以展示,所以UISpy就定位不到对应的位置所以我们就打印
from pywinauto.application import Application
if __name__ == '__main__':
app = Application(backend="uia").connect(title_re="微信")
# 进入对话框
dlg = app.window(title="微信")
# 让微信还原到界面上
dlg.restore()
# 根据条件去匹配
kwargs = {"title":"设置及其他"}
btn = dlg.child_window(**kwargs)
#
btn.draw_outline(colour='red')
dlg.print_control_identifiers()
小技巧我们可以看到打印的内容,也就dlg.这个方法就可以定位到元素 dlg.child_window(**kwargs)
改为文字横线一样会定位到
新点出来的一般在上面,你从打印开头开始找找到就接着写
import time
from pywinauto.application import Application
if __name__ == '__main__':
app = Application(backend="uia").connect(title_re="微信")
# 进入对话框
dlg = app.window(title="微信")
# 让微信还原到界面上
dlg.restore()
# 根据条件去匹配
btn = dlg["设置及其他"]
#点击
btn.click_input()
dlg.child_window(title="设置", control_type="Button").click_input()
import time
from pywinauto.application import Application
if __name__ == '__main__':
app = Application(backend="uia").connect(title_re="微信")
# 进入对话框
dlg = app.window(title="微信")
# 让微信还原到界面上
dlg.restore()
# 根据条件去匹配
btn = dlg["设置及其他"]
#点击
btn.click_input()
dlg.child_window(title="设置", control_type="Button").click_input()
# 切换窗口
app1 = Application(backend="uia").connect(title_re="设置")
dlg = app1.window(title="设置")
dlg.restore()
btn1 = dlg["关于微信"]
btn1.click_input()
version = dlg.child_window(title_re = "微信 .*").texts()
print(version)
import time
from pywinauto.application import Application
from pywinauto.keyboard import send_keys
if __name__ == '__main__':
app = Application(backend="uia").connect(title_re="微信")
# 进入对话框
dlg = app.window(title="微信")
# 让微信还原到界面上
dlg.restore()
# 根据条件去匹配
btn = dlg["聊天"]
btn.click_input()
dlg.child_window(title="搜索").click_input()
send_keys("文件传输助手")
dlg.child_window(title="文件传输助手", control_type="ListItem").click_input()
# 选中文件传输助手 第二种方案
"""
dlg.set_focus() # 激活窗口
time.sleep(1)
send_keys("{ENTER}")
"""
这边看发送定位按钮自己去点击即可,这边就不写了,自己玩玩吧
import time
from pywinauto.application import Application
from pywinauto.keyboard import send_keys
if __name__ == '__main__':
# 启动qq
app = Application("uia").start(r"D:\qq\Bin\QQScLauncher.exe")
time.sleep(1)
con = app.connect(title_re = "QQ")
qq = con.window(title="QQ")
qq.child_window(title="注册帐号", control_type="Button").click_input()
注意需要把界面app拿出来到页面上哦
from pywinauto.application import Application
from PIL import ImageGrab
if __name__ == '__main__':
# 启动qq
app = Application("uia").connect(title = "微信")
wx = app.window(title="微信")
rect = wx.child_window(title="二维码").rectangle()
### 截屏坐标 不加参数就是全屏截图
screenshot = ImageGrab.grab(bbox=(rect.left, rect.top, rect.right, rect.bottom))
### 展示图片是阻塞方法x掉后才会进行后面
screenshot.show()
from pywinauto.keyboard import send_keys
# 模拟 Alt + Tab 切换窗口
send_keys('%{TAB}')
import win32gui
import win32con
# 获取目标窗口的句柄
hwnd = win32gui.FindWindow(None, "QQ") # 替换为你要置顶窗口的标题
# 将目标窗口置顶
if hwnd:
win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
win32gui.SetForegroundWindow(hwnd)