当前位置: 首页 > article >正文

python——句柄

一、概念

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

二、实战

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

 

 


http://www.kler.cn/a/509099.html

相关文章:

  • IoTDB 数据类型相关问题
  • 5. 推荐算法的最基础和最直观的认识
  • Ability Kit-程序框架服务(类似Android Activity)
  • arcgis提取不规则栅格数据的矢量边界
  • 电脑风扇声音大怎么办? 原因及解决方法
  • RPA编程实践:Electron简介
  • 在线json格式化工具
  • Webpack简述
  • 如何在没有root权限的情况下使用R语言
  • 在线图片压缩工具
  • 2024年12月蓝桥杯Scratch12月stema选拔赛真题—小星星
  • 微软确认Win10停更不碍Microsoft 365使用!未来是否更新成谜
  • 复健第二天之[SWPUCTF 2022 新生赛]ez_ez_unserialize
  • leetcode刷题记录(六十一)——73. 矩阵置零
  • C# 反射获取私有静态方法详解
  • 移动端布局 ---- 学习分享
  • AWTK fscript 中的 输入/出流 扩展函数
  • 探秘Node.js模块Modules:从入门到精通
  • 【湖南省乡镇界】面图层shp格式arcgis数据乡镇名称和编码2020年wgs84坐标内容测评
  • 晨辉面试抽签和评分管理系统之十三:如何让不同批次、同一组别的面试考生抽到连续的号码?
  • “云网安”一体化能力指南(2024)
  • C++ Qt, 使用QTableView,分页功能
  • 使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】
  • openssl在windows下的编译
  • 打破编程“鄙视链”:探索行业发展新路径
  • vim函数定义跳转相关设置