python获取窗口句柄方法详解

在 Python 中,可以使用 win32gui 模块来获取窗口句柄。以下是几种常见的方法:

  1. 使用 FindWindow 函数查找窗口。
import win32gui
hwnd = win32gui.FindWindow("窗口类名", "窗口标题")

其中,第一个参数为窗口类名,第二个参数为窗口标题。 需要注意的是,使用这种方法可能会出现问题,因为窗口类名和标题可以被其他程序修改,不一定准确。

2. 使用 FindWindowEx 函数查找子窗口。 如果要操作窗口的子窗口,可以使用 FindWindowEx 函数查找子窗口。例如:

import win32gui
hwndParent = win32gui.FindWindow("父窗口类名", "父窗口标题")
hwndChild = win32gui.FindWindowEx(hwndParent, 0, "子窗口类名", "子窗口标题")

其中,第一个参数为父窗口句柄,第二个参数为子窗口句柄,可以为 0;第三个参数为子窗口类名,第四个参数为子窗口标题。

3. 使用 EnumWindows 函数枚举窗口。 可以使用 EnumWindows 函数枚举窗口,并使用回调函数判断窗口是否符合条件。例如:

import win32gui
def callback(hwnd, hwnd_list):
    # 判断窗口是否符合条件
    if (...):
        # 将窗口句柄添加到列表中
        hwnd_list.append(hwnd)
hwnd_list = []
win32gui.EnumWindows(callback, hwnd_list)

需要注意的是,在回调函数中,如果要修改全局变量,需要使用 global 关键字声明。例如:

import win32gui
hwnd_list = []
def callback(hwnd, param):
    global hwnd_list
    # 判断窗口是否符合条件
    if (...):
        # 将窗口句柄添加到列表中
        hwnd_list.append(hwnd)
win32gui.EnumWindows(callback, None)

以上是几种常见的获取窗口句柄的方法。在使用 FindWindowFindWindowEx 函数时,需要注意窗口类名和标题是否准确;在使用 EnumWindows 函数时,需要注意回调函数的实现方式。

 
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定