Python win32gui 模块:窗口操作方法代码实例

目录

一.获取窗口句柄

 1.根据类名、标题获取窗口句柄

FindWindow

FindWindowEx

2.根据坐标获取窗口句柄

WindowFromPoint

ChildWindowFromPoint

3.获取当前活动窗口(前台)句柄

4.获取具有焦点的窗口的句柄

5.枚举窗口句柄:顶层窗口句柄、子窗口句柄

EnumWindows:枚举顶层窗口句柄

EnumChildWindows:枚举指定父窗口的字窗口句柄

二.窗口操作

1.判断窗口是否存在、可见、最小化

2.获取窗口位置、尺寸信息、标题

3.设置窗口标题

4.显示或隐藏窗口

5.设置窗口焦点

6.窗口置顶(输入焦点)-前台窗口

7.窗口置顶(不改变输入焦点)

8.设置窗口位置、大小、z顺序

win32gui.SetWindowPos(hwnd, hWndInsertAfter, x, y, cx, cy, wFlags)

win32gui.MoveWindow(hwnd, x, y, nWidth, nHeight, bRepaint)

9.获取窗口的某个属性值

GetWindowLong

10.窗口闪烁

FlashWindow

11.坐标转换

将屏幕坐标转换为客户端坐标

将客户端坐标转换为屏幕坐标

三.向窗口发送消息

SendMessage

PostMessage

发送消息示例

1.关闭窗口

2.模拟按键输入

3.后台输入文字

4.模拟鼠标后台单击、双击

5.模拟鼠标移动

四.窗口绘制图形


一.获取窗口句柄

 1.根据类名、标题获取窗口句柄
FindWindow
  • ‌参数‌:
    • className:窗口的类名
    • title:窗口的标题
  • 功能:用于查找与指定窗口类名和窗口名称相匹配的顶级窗口。不搜索子窗口,并且不区分大小写。如果找不到匹配的窗口,返回0。
#标题和类名其中一个可以为None
hwnd=win32gui.FindWindow(className,title)#若匹配到,则返回顶级窗口的句柄,否则返回0
FindWindowEx
  • ‌参数‌:
    • hwndParent:父窗口的句柄。如果为0,则以桌面窗口为父窗口。
    • hwndChildAfter:子窗口句柄。如果为0,则从第一个子窗口开始查找。
    • className:窗口的类名。
    • title:窗口的标题
  • 功能:用于在窗口列表中寻找与指定条件相符的子窗口。它搜索子窗口,并且从排在给定的子窗口后面的下一个子窗口开始查找。如果不设置hwndParent,则从桌面窗口开始查找所有子窗口。
#相对于桌面窗口,其他窗口都是桌面窗口的子窗口
#查找子窗口
hwnd=win32gui.FinWindowEx(0,0,'title','className')#标题和类名,其中一个参数可以为None
#查找指定窗口(父窗口)的子窗口
hwnd=win32gui.FinWindowEx(pHwnd,0,'title','className')
#查找指定父窗口)以及子窗口的下一级子窗口
hwnd=win32gui.FinWindowEx(pHwnd,cHwnd,'title','className')
2.根据坐标获取窗口句柄
WindowFromPoint
  • 参数‌:
    • point:tuple数据类型,(x,y)为相对于屏幕窗口位置的坐标。
  • 功能:用于获取屏幕上特定点的顶层窗口句柄
hwnd = win32gui.WindowFromPoint((x,y)) 
ChildWindowFromPoint
  • 参数‌:
    • hwndParent:父窗口的句柄。
    • point:tuple数据类型,(x,y)为相对于父窗口的坐标。
  • 功能:获取屏幕上特定点的子窗口句柄
hwnd = win32gui.ChildWindowFromPoint(pHwnd,(x,y)) 
3.获取当前活动窗口(前台)句柄
hwnd = win32gui.GetForegroundWindow()
4.获取具有焦点的窗口的句柄
hwnd=win32gui.GetFocus()
5.获取父窗口句柄
pHwnd=win32gui.GetParent(cHwnd)#返回子窗口的上一级窗口即父窗口的句柄
#若子窗口没有父窗口,则返回0
#若cHwnd窗口句柄不存在,则报错
6.枚举窗口句柄:顶级窗口句柄、子窗口句柄
EnumWindows:枚举顶级窗口句柄
  • ‌参数‌:
    • callback:回调函数。回调函数接收两个参数:一个窗口句柄(HWND)和一个传递给 EnumWindows 的应用程序定义值。对于每个顶级窗口,系统都会调用这个回调函数,直到回调函数返回 False 或者所有的窗口都被枚举完毕
    • extra:可选的参数。通常用于传递数据到回调函数。可选参数对于 EnumWindows 函数本身并不直接使用,但它可以被用作一种方式,将额外的数据或状态传递给回调函数。
  • ‌extra:
    • ‌传递数据‌:可以将任何需要的数据作为这个可选参数传递给回调函数。例如,传递一个列表或字典,以便在回调函数中收集或更新数据。

    • ‌状态共享‌:如果需要在多个回调函数之间共享状态(比如计数或标志),可以创建一个可变对象(如列表或字典),并将其作为可选参数传递。这样,回调函数就可以修改这个对象,并且这些修改在后续的回调中可见。

    • ‌控制枚举‌:可以使用这个参数来控制枚举的过程。例如,可以在回调函数中检查某个条件,如果满足,则通过修改这个参数来通知 EnumWindows 停止枚举。

  • 功能:枚举所有顶级窗口
hwndList=[]
win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hwndList)#枚举完所有的顶级窗口后结束运行


hwndList=[]
def callback(hwnd,title):
    if hwnd='xxx':
        return False
    titleList.append(title)#titleList列表作为可选参数传递给了 EnumWindows。回调函数 callback 将每个窗口的标题添加到这个titleList列表中
win32gui.EnumWindows(callback, titleList)#枚举到句柄为xxx的窗口时,结束运行


hwndDict={}
def callback(hwnd,title):
    #IsWindow:判断指定的窗口是否打开
    #IsWindowEnabled:判断窗口是否已启用
    #IsWindowVisible:窗口是否可见
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd):
        title.update({hwnd: win32gui.GetWindowText(hwnd)})
win32gui.EnumWindows(callback, titleList)#枚举完所有的顶级窗口后结束运行
EnumChildWindows:枚举指定父窗口的子窗口句柄
  • ‌参数‌:
    • hwnd:父窗口句柄;
    • callback:回调函数。回调函数接收两个参数:一个窗口句柄(HWND)和一个传递给 EnumWindows 的应用程序定义值。对于每个顶级窗口,系统都会调用这个回调函数,直到回调函数返回 False 或者所有的窗口都被枚举完毕
    • extra:可选的参数。通常用于传递数据到回调函数。可选参数对于 EnumWindows 函数本身并不直接使用,但它可以被用作一种方式,将额外的数据或状态传递给回调函数。
  • 功能:枚举指定父窗口的子窗口
win32gui.EnumChildWindows(pHwnd, lambda hwnd, param: param.append(hwnd), hwndList)#获取父窗口下的所有后代窗口句柄

二.窗口操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值