实现windows下简单的自动化窗口管理
转载或者引用本文内容请注明来源及原作者
一、问题描述
- 用户的应用场景非常简单:一个无主播的线上弹幕游戏,需要定时开启和关闭直播,直播平台是在Windows端的某播伴侣。
二、分析需求
- 首先需要定时任务管理。在特定的时间进行应用的管理,并且能够支持用户进行修改
- 其次需要在对应应用上点击验证。某播平台需要一系列的点击验证,需要在开启后进行这一连串的操作,实现上线直播
- 最后为了方便实现逻辑
三、步步为营
- 通过需求的分析,并且我们想要快速的在Windows上实现该需求,简单查找资料,发现Python语言能够很方便的实现。
这里我们选择的环境为Python3.11,搭建好环境后开始我们的编码吧!
定时任务(schedule)
- schedule是我们常见的Python中处理定时任务的老伙计了。通过import导入我们的schedule,简单的几行代码即可实现:
#每天定时开启和关闭(open_time和close_time是时间)
#open_window和close_window是我们第二步要做的事情
schedule.every().day.at(open_time).do(open_window)
schedule.every().day.at(close_time).do(close_window)
软件开启(os)
- 涉及到系统级的软件开关,就需要请出我们的os大哥。通过指定我们软件exe所在的文件路径,os就能帮我将应用打开。
#注意这里的cmd内的文件路径,\字符需要转义,变成\\
cmd='你的exe的文件路径'
myApp = os.popen(cmd)
窗口获取(win32gui)
今天的主角win32gui,这个伙伴能够做许多了不起的事情:
- 通过窗口名获取窗口句柄(获取窗口句柄后我们才能做更多的事情)
- 通过窗口句柄+窗口下的窗口名,能够构建整个窗口树(也就是你能拿到所有展示在你面前的窗口)
- 强制聚焦我们选择的窗口句柄(唤起我们想要的窗口)
- 通过窗口句柄,获取窗口位置和大小(这个对我们的自动化点击非常有帮助)
下一步,我知道我当前应用的窗口叫啥名字呢?Spy++是个非常好用的工具。
- Spy++继承在Visual Studio编辑器下,我们可以通过下载Visual Studio,这里的社区版本也是有带的,位于我们的工具菜单栏下:

- 打开之后长这样:

- 完全看不懂咋办?别慌,有搜索工具。点击Spy++窗口上方的搜索按钮\查找窗口:

- 将瞄准器对准我们想要的窗口就能捕获到我们的窗口了!这时候Spy++列表就能够ping到选择的窗口选项,右键窗口选项,选择属性。打开属性面板,查看对应类名和标题名。


- Spy++继承在Visual Studio编辑器下,我们可以通过下载Visual Studio,这里的社区版本也是有带的,位于我们的工具菜单栏下:
大火烹饪!通过代码将两者串联起来。
#handle为句柄
handle = win32gui.FindWindow(类名, 标题名)
#获取handle下的子窗口句柄
child = win32gui.FindWindowEx(handle, None, 子标题名, None)
模拟点击(pywinauto)
- pywinauto内有一个mouse对象,能够帮助我们去点击对应的窗口位置,实现基本的鼠标相关操作。
#child是我们上一步骤获取的子窗口句柄,通过GetWindowRect,获取子窗口的位置
left, top, right, bottom = win32gui.GetWindowRect(child)
#算好位置
click_x = left + int((right - left) * 7 / 10)
click_y = bottom - 40
#模拟点击位置
pywinauto.mouse.click(coords=(click_x, click_y))
总结
- 最后结合我们的Windows进程服务,一个简单的自动化窗口管理器就能够实现了。这里最重要的要点就是成功捕获到窗口句柄,句柄是重要的操作对象。通过句柄,我们能够实现更复杂更繁琐的需求。

实现windows下简单的自动化窗口管理的更多相关文章
- 【微服务No.1】Consul服务发现在windows下简单使用
基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent -dev 显示这个界面说明已经开启成功. 页面显示: 然后访问 ...
- windows下简单的缓冲区溢出
缓冲区溢出是什么? 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等 ...
- windows下简单安装postgres
目前版本是PostgreSQL 9.6,它经过以下平台认证: 32位Windows Windows 7,8和10 Windows 2008 Server 64位Windows Windows 7,8和 ...
- Consul服务发现在windows下简单使用
目录 基本介绍: 服务连接: 客户端: 系列章节: 回到顶部 基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent ...
- windows下安装php依赖关系管理工具composer
1.安装Composer Composer是PHP的依赖管理工具之一,官方网站 http://getcomposer.org/ .它支持多种安装方式,对于在win下做开发的草来说,最便捷的方式就是下载 ...
- Windows下安装Cygwin及包管理器apt-cyg(转)
本文为转载文章: http://www.2cto.com/os/201212/176551.html Cygwin可以在Windows下使用unix环境Bash和各种功能强大的工具,对于Linux管理 ...
- windows下控制台程序实现窗口显示
windows下实现窗口显示,如果限定是C/C++语言,并且是原生Windows支持,需要使用GDI或GDI+.一般是在Visual Studio里新建Win32应用程序,而不是Win32 conso ...
- windows下tomcat在当前窗口运行,不在新弹出的窗口运行
window下tomcat在当前窗口启动,不在一个新的窗口启动startup.bat中最下几行goto setArgs:doneSetArgscall "%EXECUTABLE%" ...
- 在中文windows下使用pywinauto进行窗口操作
这两天开始接触pywinauto,听说百度的自动化QA也用这个模块,于是来了兴趣,但网上的教程很少,而且基本上都是拿官方的notepad来说,首先中文菜单的支持是问题,其次各种操作也没有写清楚,阅读官 ...
- windows下简单验证码识别——完美验证码识别系统
此文已由作者徐迪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 讲到验证码识别,大家第一个可能想到tesseract.诚然,对于OCR而言,tesseract确实很强大,自带 ...
随机推荐
- 每日学学Java开发规范,集合处理(附阿里巴巴Java开发手册(终极版))
前言 每次去不同的公司,码不同的代码,适应不同的规范,经常被老大教育规范问题,我都有点走火入魔的感觉,还是要去看看阿里巴巴Java开发规范,从中熟悉一下,纠正自己,码出高效,码出质量. 想细看的可以去 ...
- python中os模块的方法总结
#返回当前的工作目录os.getcwd #print(os.getcwd()) #改变一个目录 chdir(path) #列出所有的文件或者目录 listdir(path) #print(os.lis ...
- 【转载】《扩散模型是实时游戏引擎(Diffusion Models Are Real-Time Game Engines)》的论文,向我们展示了世界上第一个完全由神经模型驱动的游戏引擎,GameNGen。这也是历史上首次,AI能在不借助其他游戏引擎的情况下,为玩家生成实时游戏了,并且在单个TPU上速度可以达到每秒20帧
地址: https://www.youtube.com/watch?v=VniPJII6ak0 8月29号,谷歌DeepMind发布了一篇名为<扩散模型是实时游戏引擎(Diffusion Mod ...
- 选型4G-Cat.1模组Air780E,必须要说的注意事项!
Air780E是合宙低功耗4G-Cat.1模组经典型号之一,累计出货数量2000万+,广泛应用于物联网各行业.在此,特别感谢各位大佬的信任与支持. 写这篇文档的目的是什么呢? 从用户的角度,解答大 ...
- []JSR 133 (Java Memory Model) FAQ
JSR 133 (Java Memory Model) FAQ Jeremy Manson and Brian Goetz, February 2004 内容列表 究竟什么是内存模型? 其它语言,像C ...
- Think in Java之构造器的真正调用顺序
构造器是OOP的重要组成部分,很多人认为它很容易.只不过是new了一个对象而已.而think in java的作者却告诉我们,其实这并不容易.先看下面这个例子.在你没看结果之前,你觉得你的答案是对的么 ...
- 2021GPLT
病毒溯源 给定一棵树,树上有\(n\)个节点,编号从\(0\)到\(n-1\),请你输出从根节点开始的最长的一条链,且该链字典序最小 题解:\(dfs\)树的遍历 + 贪心 首先我们先找到入度为\(0 ...
- 无快不破,在本地 docker 运行 IDEA 里面的项目?
目录 前言 Docker Compose 1. Docker Compose是什么? 2. Docker Compose 的具体步骤 3. 如何在IDEA项目里面使用Docker Compose 启动 ...
- SpringCloudStream极简教程
简介 Spring Cloud Stream 是一个轻量级消息驱动微服务框架,旨在简化与消息中间件(如 Kafka.RabbitMQ 等)的集成,支持消息的发布和订阅模式.它提供了一种基于 Sprin ...
- 使用Docker快速部署一个Net项目
前言 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. 优点 Web 应用的自动化打包和发布. 自动化测试和 ...