欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > python——句柄

python——句柄

2025/1/18 5:30:44 来源:https://blog.csdn.net/jin719/article/details/145213144  浏览:    关键词: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和线程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

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com