python——句柄

devtools/2025/1/19 18:33:13/

一、概念

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

二、实战

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和线程IDpid, 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.ppmy.cn/devtools/151881.html

相关文章

Ubuntu22.04系统切换内核版本

Ubuntu系统切换内核版本 1 更换镜像源2 查询可更换的内核版本3 安装合适版本内核4 切换内核版本5 验证内核是否更换成功 1 更换镜像源 使用鱼香ROS脚本来更换镜像源 wget http://fishros.com/install -O fishros && . fishros2 查询可更换的内核版本 sudo apt updat…

【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度

使用 localStorage 存储每个视频的播放进度在组件加载时恢复上次的播放进度在视频播放过程中实时保存进度在组件卸载前保存最终进度使用 timeupdate 事件来监听视频播放进度的变化 在模板中为视频元素添加事件监听&#xff1a; <videoloopautoplaycontrols:id"video_…

SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输

前言 大家好&#xff0c;我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术&#xff0c;以保证图表的实时渲染&#xff0c;当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE&#xff1f; SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …

Android CustomTextField

在 Compose 中开发用户界面时&#xff0c;需要处理输入框和键盘的交互&#xff0c;例如在键盘弹出时调整布局位置&#xff0c;避免遮挡重要内容。本篇博客将通过一个完整的示例展示如何实现这一功能。 功能概述 本例实现了一个简单的输入框。当输入框获得焦点或输入文字时&…

【Qt】04-Lambda表达式

前言一、概念引入二、使用方法2.1 基本用法代码示例2.2 捕获外部变量2.3 参数列表 三、完整代码mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h 总结 前言 一、概念引入 Lambda表达式&#xff08;Lambda Expressions&#xff09;是C11标准引入的一种匿名函数对象&…

vector和string类库中的迭代器

关于标准库类型vector&#xff1a;定义和初始化vector对象的方式有哪些 默认初始化&#xff1a;创建一个空的 vector std::vector<int> v1;初始化指定数量的相同默认值元素&#xff1a; std::vector<int> v2(5); // 包含 5 个默认值为 0 的整数初始化指定数量的指…

mybatisPlus打印sql配置

MyBatis-Plus 提供了方便的配置方式来打印 SQL 查询语句&#xff0c;以便进行调试和性能分析。可以通过配置 log 来输出 SQL 语句以及执行的参数。 方法 1&#xff1a;通过 application.properties 或 application.yml 配置打印 SQL 可以通过配置 application.properties 或 a…

基于 Python 的毕设选题管理系统设计与实现

标题:基于 Python 的毕设选题管理系统设计与实现 内容:1.摘要 本文介绍了一个基于 Python 的毕设选题管理系统的设计与实现。该系统旨在解决传统毕设选题管理方式中存在的效率低下、信息不透明等问题。通过使用 Python 语言和相关技术&#xff0c;实现了对毕设选题的信息化管理…