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

Windows高级技巧:轻松实现多进程窗口的连接与管理

在Windows操作系统中,管理多个进程窗口可能是一项复杂的任务,特别是在自动化测试或多任务处理时。本文将介绍一种高效的方法,通过Python编程和AirtestIDE工具,实现多进程窗口的便捷连接与管理。同时,将提供具体的代码示例,以便读者更好地理解和应用。

一、引言

在Windows环境下,一个应用程序可能会打开多个进程窗口,这给自动化测试带来了挑战。特别是在AirtestIDE中,当需要搜索并连接特定窗口时,如果窗口名称相同或窗口数量众多,将难以准确选择目标窗口。本文将探讨如何通过Python和AirtestIDE,实现多进程窗口的便捷连接。

二、获取Windows应用进程信息

要实现多进程窗口的连接,首先需要获取Windows应用进程的相关信息。这里我们使用Python的psutilpywinauto库来完成这一任务。

  1. 安装依赖库

    在Python环境中安装psutilpywinauto库:

     

    bash复制代码

    pip install psutil pywinauto
  2. 获取进程信息

    使用psutil.process_iter()方法获取本地计算机上所有正在运行的进程,并筛选出我们需要的进程信息(如PID、名称、创建时间等):

     

    python复制代码

    import psutil
    def get_process_info(process_name):
    process_info_list = []
    for proc in psutil.process_iter(['pid', 'name', 'create_time']):
    try:
    if process_name.lower() in proc.info['name'].lower():
    process_info_list.append(proc.info)
    except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
    pass
    return process_info_list
  3. 判断进程是否有界面

    使用pywinauto库的findwindows.find_windows()方法,通过进程PID获取窗口句柄,判断该进程是否有界面:

     

    python复制代码

    from pywinauto import findwindows
    def has_gui(pid):
    try:
    windows = findwindows.find_windows(process=pid)
    return len(windows) > 0
    except Exception as e:
    return False
三、连接特定进程窗口

在获取了进程信息并判断了进程是否有界面后,我们可以使用AirtestIDE的connect_device()方法,通过进程PID连接特定进程窗口。

  1. 选择特定进程

    遍历进程信息列表,选择有界面的进程PID:

     

    python复制代码

    def select_process(process_info_list):
    for proc_info in process_info_list:
    if has_gui(proc_info['pid']):
    return proc_info['pid']
    return None
  2. 连接并操作特定进程窗口

    使用connect_device()方法连接特定进程窗口,并进行自动化操作(如点击、输入、截图等):

     

    python复制代码

    from airtest.core.api import *
    def connect_and_operate(process_info):
    if process_info:
    try:
    dev = connect_device(f"Windows:///?process={process_info}")
    print("Target process found.")
    # 连接后可以进行自动化操作,例如点击、输入等,这里仅做截图操作
    sleep(3.0)
    snapshot(msg="当前界面截图", quality=90)
    except Exception as e:
    print(f"Error during connecting or operating: {e}")
    else:
    print("No target process found.")
四、完整代码示例

以下是完整的代码示例,展示了如何获取进程信息、选择特定进程、连接并操作该进程窗口:

 

python复制代码

# -*- encoding=utf8 -*-
__author__ = "Airtest"
import psutil
from pywinauto import findwindows
from airtest.core.api import *
def get_process_info(process_name):
process_info_list = []
for proc in psutil.process_iter(['pid', 'name', 'create_time']):
try:
if process_name.lower() in proc.info['name'].lower():
process_info_list.append(proc.info)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return process_info_list
def has_gui(pid):
try:
windows = findwindows.find_windows(process=pid)
return len(windows) > 0
except Exception as e:
return False
def select_process(process_info_list):
for proc_info in process_info_list:
if has_gui(proc_info['pid']):
return proc_info['pid']
return None
def connect_and_operate(process_info):
if process_info:
try:
dev = connect_device(f"Windows:///?process={process_info}")
print("Target process found.")
# 连接后可以进行自动化操作,例如点击、输入等,这里仅做截图操作
sleep(3.0)
snapshot(msg="当前界面截图", quality=90)
except Exception as e:
print(f"Error during connecting or operating: {e}")
else:
print("No target process found.")
if __name__ == "__main__":
process_name = "有道云笔记.exe" # 示例应用程序名称
process_info_list = get_process_info(process_name)
print(f"Found processes: {process_info_list}")
selected_process = select_process(process_info_list)
print(f"Selected process: {selected_process}")
connect_and_operate(selected_process)
五、总结

本文介绍了如何在Windows环境下,通过Python编程和AirtestIDE工具,实现多进程窗口的便捷连接与管理。通过获取进程信息、判断进程是否有界面、选择特定进程并连接其窗口,我们可以轻松地进行自动化测试或多任务处理。希望本文能为您提供有价值的参考和帮助。

相关文章:

Windows高级技巧:轻松实现多进程窗口的连接与管理

在Windows操作系统中,管理多个进程窗口可能是一项复杂的任务,特别是在自动化测试或多任务处理时。本文将介绍一种高效的方法,通过Python编程和AirtestIDE工具,实现多进程窗口的便捷连接与管理。同时,将提供具体的代码示…...

洪水淹没制图

原文链接:洪水淹没制图https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247624956&idx2&sn2557e56396eed7568d27baf694dc86fe&chksmfa8da91bcdfa200d307ea12ab9f52394ca6ef0bea3111bd8a873b34c950bcd9441c377f13674&token1392391660&…...

PHP的 CSRF、XSS 攻击和防范

CSRF攻击 CSRF(Cross-Site Request Forgery)攻击,也称为跨站请求伪造,是一种常见的网络安全威胁。在这种攻击中,攻击者利用已认证的用户身份,在用户不知情的情况下伪造请求,冒充用户的操作向目…...

怎么在线制作活码?二维码活码的简单制作技巧

进入数字化时代,二维码已经成为主要的一种内容分享方式,将内容生成活码二维码,可以方便内容的传输与存储,在日常生活中的很多场景都有二维码的应用。通过生成二维码的方式可以更简单快速的分享内容给其他人,有效提高获…...

Lua中实现异步HTTP请求的方法

Lua,作为一种轻量级的脚本语言,因其简洁和高效,在游戏开发、嵌入式系统以及互联网应用中得到了广泛的应用。本文将介绍如何在Lua中实现异步HTTP请求,并提供相应的代码实现,包括如何通过代理服务器发送请求。 异步HTTP…...

拓展学习-golang的基础语法和常用开发工具

golang的基础语法 golang的基础语法和其他语言大部分都差别不大,如果我们有学习过其他语言,比如JavaScript,php,java,python等,有其他语言的语法基础,那么我们学习golang将更容易上手。那我们直…...

得计算题者得天下!软考系统集成计算题详解!

软考中级系统集成项目管理工程师考试一共有《综合知识》和《案例分析》两门科目,而在这两科中都会涉及到计算题,特别是案例分析中,计算题每次考试都会占到一道大题,共25分,占到了科目总分的1/4,所以对于系统…...

在AdaBoost中每轮训练后,为什么错误分类的样本权重会增大e^2αt倍

在 AdaBoost 的每一轮迭代中,样本 i i i 的权重更新公式为: w t 1 , i w t , i ⋅ exp ⁡ ( − α t y i G t ( x i ) ) Z t w_{t1,i} \frac{w_{t,i} \cdot \exp(-\alpha_t y_i G_t(x_i))}{Z_t} wt1,i​Zt​wt,i​⋅exp(−αt​yi​Gt​(xi​))​ …...

什么是数据中心?

数据中心是一个专门用于容纳大量联网计算机设备的设施,这些设备共同协作,以处理、存储和传输数据。现代社会中,大部分高科技公司都依赖数据中心来提供在线服务,例如网站、应用程序和云服务等。可以说,数据中心是互联网…...

【工具使用】VSCode如何将本地项目关联到远程的仓库 (vscode本地新项目与远程仓库建立链接)

在日常练习的项目中,我每次都在vscdoe编写前台代码,但是对于编写的代码,如何将本地项目关联到远程的仓库;这里做一下记录 文章目录 1、Gitee 新建远程仓库2、将本地的项目和远程仓库进行关联**3、将本地修改的代码推送到远程通过命…...

安全见闻-二进制与网络安全的关系

一、二进制的基本概念 二、二进制在网络安全中的重要性 三、二进制安全的概念与范畴 1. 二进制安全的定义 2. 范畴 四、二进制安全的渗透测试方法 1. 静态分析 2. 动态分析 3. 模糊测试 4. 漏洞利用 5. 代码审计 五、结论 学习视频泷羽sec:安全见闻&…...

MongoDB 部署指南:从 Linux 到 Docker 的全面讲解

一、MongoDB 简介 MongoDB 是一种 NoSQL 数据库,以文档模型存储数据,具备高性能、弹性扩展性和分布式架构等特点,非常适用于高并发和大数据量的场景。本文将从 Linux 和 Docker 环境开始讲解,帮助读者在不同环境下顺利部署 Mongo…...

Java AQS 源码

前言 相关系列 《Java & AQS & 目录》(持续更新)《Java & AQS & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Java & AQS & 总结》(学习总结/最新最准/持续更新)《Java & …...

栈和队列(1)——栈

栈的基本概念 1. 栈的定义:只允许在一端进行插入或删除操作的线性表(可以理解为操作受限的线性表)。 2. 栈的特点:后进先出(LIFO)。 3. 栈的基本操作:初始化、销毁、进栈、出栈、读栈顶元素等…...

Java中的反射(Reflection)

先上两张图来系统的看一下反射的作用和具体的实现方法 接下来详细说一下反射的步骤以及之中使用的方法: 获取Class对象: 要使用反射,首先需要获得一个Class对象,该对象是反射的入口点。可以通过以下几种方式获取Class对象&#x…...

【IC验证】linux系统下基于QuestaSim的systemverilog仿真TCL命令

linux系统下基于QuestaSim的systemverilog仿真TCL命令 一.终端打开QuestaSim二.QuestaSim中TCL脚本指令1.仿真库的创建(vlib)-非必要2.编译命令(vlog)3.仿真命令(vlog)4.运行命令(run&#xff0…...

Python图像处理库PIL,实现旋转缩放、剪切拼接以及滤波

文章目录 切割缩放和旋转拼接 PIL的Image类,提供了一些常用的图像处理方法。 切割缩放和旋转 PIL可以很方便地实现如下效果 代码如下 from PIL import Image path lena.jpg img Image.open(path) # 读取 img.resize((50, 50), resampleImage.Resampling.NEARE…...

xhr的readyState和status

XMLHttpRequest(XHR)对象中的readyState和status用于监控异步 HTTP 请求的状态。它们分别表示请求的当前阶段和服务器的响应状态。 readyState 用于判断请求所处的阶段,确保数据完全接收。 status 用于判断请求的结果状态(如200表…...

Rust 力扣 - 238. 除自身以外数组的乘积

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 这题主要有个关键点,就是元素能取0,然后我们分类讨论元素为0的数量 如果数组中存在至少两个元素为0,则每个元素的除自身以外的乘积为0如果数组中仅存在一个0,则为…...

【Vue框架】基础语法练习(1)

其实更多知识点已经在Vue.js官网十分清楚了,大家也可以去官网进行更细节的学习 https://cn.vuejs.org/ 说明:目前最新是Vue3版本的,但是Vue2已经深得人心,所以就是可以支持二者合用。它们最大的区别就是Vue3是组合式API&#xf…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

Go语言多线程问题

打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...