python中的句柄操作

python中的句柄操作

制作人:全心全意

通过窗口标题获取句柄

import win32gui

hld = win32gui.FindWindow(None,u"Adobe Acrobat") #返回窗口标题为Adobe Acrobat的句柄

  

通过父窗口句柄获取子句柄

#parent为父窗口句柄id
def get_child_windows(parent):
    '''
    获得parent的所有子窗口句柄
     返回子窗口句柄列表
     '''
    if not parent:
        return
    hwndChildList = []
    win32gui.EnumChildWindows(parent, lambda hwnd, param: param.append(hwnd),  hwndChildList)
    return hwndChildList

  

根据句柄获取句柄标题和类名

import win32gui

title = win32gui.GetWindowText(jbid)   #jbid为句柄id
#获取标题
clsname = win32gui.GetClassName(jbid)   
#获取类名

  

根据句柄获取窗口位置

import win32gui
left, top, right, bottom = win32gui.GetWindowRect(jbid)
#分别为左、上、右、下的窗口位置

  

根据句柄进行点击操作

import win32api,win32con

win32api.SetCursorPos([横坐标, 纵坐标])
#根据横纵坐标定位光标
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
#给光标定位的位置进行单击操作(若想进行双击操作,可以延时几毫秒再点击一次)
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
#给光标定位的位置进行右击操作

  

根据句柄将窗口放在最前

win32gui.SetForegroundWindow(jbid)

  

转载于:https://www.cnblogs.com/zhangquan-yw/p/10239132.html

Python 中,"句柄(Handle)" 是一个广义的概念,通常指代对某个资源的引用或标识符。它并不是 Python 语言本身特有的术语,而是操作系统和编程接口中常见的抽象概念。句柄可以用来表示打开的文件、窗口、网络连接、设备等资源。 ### 文件句柄 在文件操作中,句柄是指通过 `open()` 函数打开文件后返回的一个对象,用于后续的读写操作。例如: ```python with open('example.txt', 'r') as file_handle: content = file_handle.read() ``` 在此示例中,`file_handle` 是一个文件句柄,它允许程序对文件进行读取、写入、定位等操作。使用场景包括日志记录、数据导入导出、配置文件管理等 [^4]。 ### 窗口句柄 在 GUI 自动化中,句柄用于唯一标识一个窗口或控件。Python 可以通过第三方库如 `pywin32` 或 `PyAutoGUI` 获取并操作窗口句柄,实现自动化任务。例如,获取当前活动窗口的句柄并执行输入操作: ```python import win32gui hwnd = win32gui.GetForegroundWindow() print("当前窗口句柄:", hwnd) ``` 这种机制常用于自动化测试、机器人流程(RPA)、桌面应用控制等场景 [^1]。 ### 网络连接句柄 在网络编程中,套接字(socket)对象也可以视为一种句柄,它代表了一个网络连接。通过 socket 句柄,可以进行数据的发送与接收: ```python import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('example.com', 80)) s.sendall(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n') response = s.recv(4096) ``` 此方式适用于构建客户端-服务器通信、HTTP 请求处理、实时数据传输等应用场景 [^4]。 ### 协程句柄 虽然协程本身不是句柄的直接体现,但在异步编程中,协程的调度和管理依赖于事件循环和任务对象,这些对象可以看作是对协程执行状态的引用。例如,在 `asyncio` 模块中: ```python import asyncio async def my_coroutine(): print("协程开始") await asyncio.sleep(1) print("协程结束") loop = asyncio.get_event_loop() task = loop.create_task(my_coroutine()) loop.run_until_complete(task) ``` 这里 `task` 对象可以视为对协程执行上下文的句柄,用于调度和管理协程的生命周期 [^2]。 ### 信号处理句柄 在系统编程中,句柄还可以指代信号处理器。Python 的 `signal` 模块允许注册函数作为特定信号的处理程序,该函数即为信号句柄: ```python import signal import time def handler(signum, frame): print('收到中断信号!') signal.signal(signal.SIGINT, handler) time.sleep(10) ``` 这种方式适用于进程间通信、异常退出处理、定时器触发等场景 [^3]。 ### WebDriver 中的窗口句柄 在自动化浏览器测试中,Selenium 提供了窗口句柄(`window_handles` 和 `current_window_handle`),用于管理多个浏览器标签页或弹窗之间的切换: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com") main_window = driver.current_window_handle for handle in driver.window_handles: if handle != main_window: driver.switch_to.window(handle) ``` 此类句柄适用于多窗口操作、弹出广告拦截、页面跳转验证等 Web 测试场景 [^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值