目录
EnumChildWindows:枚举指定父窗口的字窗口句柄
win32gui.SetWindowPos(hwnd, hWndInsertAfter, x, y, cx, cy, wFlags)
win32gui.MoveWindow(hwnd, x, y, nWidth, nHeight, bRepaint)
一.获取窗口句柄
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)#获取父窗口下的所有后代窗口句柄