You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用win32gui通过窗口标题获取特定Windows窗口的hwnd?

通过窗口标题部分匹配获取HWND并设置前台窗口

完全可以通过窗口标题的部分匹配来动态获取目标窗口的HWND,核心思路是用win32gui.EnumWindows枚举系统中所有顶层窗口,再通过win32gui.GetWindowText获取每个窗口的标题,筛选出包含目标字符串的窗口。

实现步骤与代码示例

  1. 定义回调函数,遍历窗口时检查标题是否匹配
  2. 调用EnumWindows执行遍历,锁定符合条件的HWND
  3. 对找到的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:54:52