如何用win32gui通过窗口标题获取特定Windows窗口的hwnd?
通过窗口标题部分匹配获取HWND并设置前台窗口
完全可以通过窗口标题的部分匹配来动态获取目标窗口的HWND,核心思路是用win32gui.EnumWindows枚举系统中所有顶层窗口,再通过win32gui.GetWindowText获取每个窗口的标题,筛选出包含目标字符串的窗口。
实现步骤与代码示例
- 定义回调函数,遍历窗口时检查标题是否匹配
- 调用
EnumWindows执行遍历,锁定符合条件的HWND - 对找到的HWND做前置处理(比如恢复最小化窗口),再调用
SetForegroundWindow
import win32gui import win32con def get_hwnd_by_partial_title(partial_title): target_hwnd = None def callback(hwnd, extra): nonlocal target_hwnd # 获取当前窗口标题 window_title = win32gui.GetWindowText(hwnd) # 检查标题是否包含目标字符串,需要忽略大小写的话可加.lower() if partial_title in window_title: target_hwnd = hwnd # 找到目标后停止枚举 return False return True # 枚举系统内所有顶层窗口 win32gui.EnumWindows(callback, None) return target_hwnd # 使用示例 partial_title = "记事本" # 替换成你需要匹配的部分标题 hwnd = get_hwnd_by_partial_title(partial_title) if hwnd: # 若窗口处于最小化状态,先恢复显示 if win32gui.IsIconic(hwnd): win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) # 将窗口设置为前台 win32gui.SetForegroundWindow(hwnd) else: print("未找到匹配的窗口")
注意事项
- 如果存在多个窗口标题包含目标字符串,上述代码会返回第一个匹配的窗口;若需处理多窗口场景,可修改逻辑收集所有符合条件的HWND后再筛选
- 部分程序的窗口标题会动态变化(比如编辑器打开的文件名),要确保匹配字符串是窗口标题中稳定存在的部分
- 高权限进程的窗口可能会导致
SetForegroundWindow调用失败,这种情况需要额外处理权限问题
内容的提问来源于stack exchange,提问作者BipBop
相关产品推荐
相关产品推荐

