首页 > 编程语言 >python——句柄

python——句柄

时间:2025-01-17 20:02:07浏览次数:3  
标签:窗口 title python 句柄 list window hwnd

一、概念

        句柄指的是操作系统为了标识和访问对象而提供的一个标识符,在操作系统中,每个对象都有一个唯一的句柄,通过句柄可以访问对象的属性和方法。例如文件、进程、窗口等都有句柄。在编程中,可以通过句柄来操作这些对象,从而实现对系统资源的控制和管理。

二、实战

1、获取当前所有窗口的句柄

def get_all_window():
    hwnd_list = []
    win32gui.EnumWindows(lambda hwnd, param: param.append(hwnd), hwnd_list)
    return hwnd_list

 2、从所有窗口句柄中,根据窗口标题title,获取想要的特定窗口句柄

def get_hwnd_from_name(name)
    hwnd_list = []
    all_hwnd_list = get_all_window()  # 调用上面的方法
    for hwnd in all_hwnd_list:
        title = win32gui.GetWindowText(hwnd)  # 根据窗口句柄,获取句柄对应的窗口的标题
        if title == name:
            hwnd_list.append(hwnd)

    logging.info(f'窗口标题为{name}的所有窗口的句柄:{hwnd_list}')
    return hwnd_list

3、根据窗口句柄,获取一些别的信息(适用于窗口句柄不唯一,但是标题、类名等值唯一的情况)

def get_windows_info(hwnd):
    all_hwnd_list = get_all_window()  # 调用上面的方法
    for hwnd in all_hwnd_list:
        # 获取窗口标题
        title = win32gui.GetWindowText(hwnd)

        # 获取窗口类名
        clsname = win32gui.GetClassName(hwnd)

        # 获取窗口位置和大小
        rect= win32gui.GetWindowRect(hwnd)

        # 获取窗口所在的进程ID和线程ID
        pid, tid = win32process.GetWindowThreadProcessId(hwnd)

        # 返回窗口的属性信息
        return {'title': title, 'class': clsname, 'rect': rect, 'pid': pid, 'tid': tid}

4、获取主窗口句柄,根据其子窗口的标题获取该子窗口对象,然后点击子窗口

def blurred_click_button_in_window(title='XX', Buttons='状态'):
    handle = get_hwnd_from_name(title)  # 调用上面的方法
    # handle = handle[0]  # 如果列表有多个值,则需要确认你想要的窗口句柄是哪一个
    print(f'获取到的窗口句柄是:{handle}')
    time.sleep(1)
    app = Application(backend='uia').connect(handle=handle)  # 连接到此窗口
    
    try:
        win32gui.SetForegroundWindow(handle)  # 将窗口置顶,避免被遮挡
    except Exception as e:
        logging.info(f'{e}')

    main_window = app.window(handle=handle)  # 获取主窗口对象
    main_window.print_control_identifiers()  # 打印出此主窗口包含的所有子窗口的信息(title,auto_id,control_type)
    child_window = main_window.child_window(title_re=Buttons, found_index=0)  #根据子窗口的标题获取子窗口对象(_re表示模糊匹配,found_index=0适用于title不唯一时取索引为第一位的),也可根据类名来获取:child_window = main_window.child_window(class_name='Edit')
    
    child_window.click_input()  # 点击子窗口,如果是输入框赋值可以写成:child_window.type_keys('Cc')
    return main_window

 

 

标签:窗口,title,python,句柄,list,window,hwnd
From: https://blog.csdn.net/jin719/article/details/145213144

相关文章

  • 【Nameko库】一个用于构建分布式系统的Python库
    1.微服务介绍微服务架构是一种将应用程序拆分为多个小型服务的方法,每个服务都可以独立开发、部署和扩展。这种架构使得应用程序更加模块化、可维护和可扩展。微服务架构的核心在于服务间的通信,主要有同步通信(如RESTful和RPC)和异步通信(如消息中间件)两种方式。典型的微服务架构有......
  • Python 自动识别验证码的详细指南
    验证码(CAPTCHA)广泛应用于在线表单和注册页面,旨在防止自动化攻击。尽管验证码设计旨在增加机器识别的难度,但借助光学字符识别(OCR)技术,我们仍然可以实现自动化的验证码识别。在本教程中,我们将使用Python编写一个简单的验证码识别程序,利用TesseractOCR引擎结合图像预处理技术提高......
  • Python 实现简单的验证码识别
    验证码是一种常见的验证机制,用来区分用户是人还是程序。在本教程中,我们将使用Python编写一个程序,通过图像处理和OCR技术自动识别英文数字组合的验证码。以下将逐步介绍如何实现这一功能。环境准备安装Python和必要库首先,确保已安装Python。如果未安装,可以前往Python......
  • 【Python】Selenium根据网页页面长度,模拟向下滚动鼠标,直到网页底部的操作
    最近在弄selenium的爬取的过程中,我发现一些网站上的表格,是需要手动拉到底部才能加载完成的。如果没有拉到底部,那么在获取网页表格的时候,表格就会只有显示的一部分,页面就不完整。所以我就整理了一些模拟滚动鼠标,加载到页面底部的方法。用于处理这个问题~以下是几种常见的......
  • The Zen of Python (Python 之禅)
    在交互式解释器中输入importthis就会显示TimPeters的TheZenofPython1>>>importthis2TheZenofPython,byTimPeters34Beautifulisbetterthanugly.5Explicitisbetterthanimplicit.6Simpleisbetterthancomplex.7Complexisbetterthancom......
  • python 股票数据接口 python如何获取股票交易数据
    python股票数据接口python如何获取股票交易数据 转载风华绝代的java2023-08-0521:48:47文章标签python股票数据接口python数据库c#sqlH5文章分类Python后端开发阅读数387有备考软考的小伙伴,想积分落户,单位评职称?科目太多不知道怎么选?考试考点难点太多没有头绪?刚准......
  • 超高频算法——双指针思想的领悟 python
    目录问题引入1解决方案牛刀小试问题引入2解决方案举一反三实战演练(双指针)问题引入3Whatis滑动窗口关键要素实战演练(滑动窗口)总结问题引入1给你一个数组(按非递减顺序排列),假定为【2,4,5,6,7,9】请你在数组中找到两个数满足:相加等于10,返回它们的值。你是一个不知道双......
  • 初学者如何用 Python 写第一个爬虫?
    ......
  • 【Python】深入探讨Python中的单例模式:元类与装饰器实现方式分析与代码示例
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界单例模式(SingletonPattern)是一种常见的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Python中,实现单例模式的方式多种多样,包括......
  • Python魔法方法深度解析:解密 __call__、__new__ 和 __del__
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在Python中,魔法方法(MagicMethods)是一些特殊的方法,它们允许开发者定制对象的行为。这些方法前后由双下划线包围,如__init__、__str__、__call_......