转载或者引用本文内容请注明来源及原作者

一、问题描述

  • 用户的应用场景非常简单:一个无主播的线上弹幕游戏,需要定时开启和关闭直播,直播平台是在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到选择的窗口选项,右键窗口选项,选择属性。打开属性面板,查看对应类名和标题名。



  • 大火烹饪!通过代码将两者串联起来。

      #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下简单的自动化窗口管理的更多相关文章

  1. 【微服务No.1】Consul服务发现在windows下简单使用

    基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent -dev 显示这个界面说明已经开启成功. 页面显示: 然后访问 ...

  2. windows下简单的缓冲区溢出

    缓冲区溢出是什么? 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等 ...

  3. windows下简单安装postgres

    目前版本是PostgreSQL 9.6,它经过以下平台认证: 32位Windows Windows 7,8和10 Windows 2008 Server 64位Windows Windows 7,8和 ...

  4. Consul服务发现在windows下简单使用

    目录 基本介绍: 服务连接: 客户端: 系列章节: 回到顶部 基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent ...

  5. windows下安装php依赖关系管理工具composer

    1.安装Composer Composer是PHP的依赖管理工具之一,官方网站 http://getcomposer.org/ .它支持多种安装方式,对于在win下做开发的草来说,最便捷的方式就是下载 ...

  6. Windows下安装Cygwin及包管理器apt-cyg(转)

    本文为转载文章: http://www.2cto.com/os/201212/176551.html Cygwin可以在Windows下使用unix环境Bash和各种功能强大的工具,对于Linux管理 ...

  7. windows下控制台程序实现窗口显示

    windows下实现窗口显示,如果限定是C/C++语言,并且是原生Windows支持,需要使用GDI或GDI+.一般是在Visual Studio里新建Win32应用程序,而不是Win32 conso ...

  8. windows下tomcat在当前窗口运行,不在新弹出的窗口运行

    window下tomcat在当前窗口启动,不在一个新的窗口启动startup.bat中最下几行goto setArgs:doneSetArgscall "%EXECUTABLE%" ...

  9. 在中文windows下使用pywinauto进行窗口操作

    这两天开始接触pywinauto,听说百度的自动化QA也用这个模块,于是来了兴趣,但网上的教程很少,而且基本上都是拿官方的notepad来说,首先中文菜单的支持是问题,其次各种操作也没有写清楚,阅读官 ...

  10. windows下简单验证码识别——完美验证码识别系统

    此文已由作者徐迪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 讲到验证码识别,大家第一个可能想到tesseract.诚然,对于OCR而言,tesseract确实很强大,自带 ...

随机推荐

  1. 基于案例分析 MySQL 权限认证中的具体优先原则

    在 MySQL 的日常管理过程中,大家或多或少会遇到权限认证相关的问题. 例如,本来能够正常执行的操作,可能在新增一个账号或授权后就突然失败了. 这种现象往往让人误以为是 bug,但很多时候,其实并不 ...

  2. 借用Ultralytics Yolo快速训练一个物体检测器

    借用Ultralytics Yolo快速训练一个物体检测器 同步发表于 https://www.codebonobo.tech/post/14 大约在16/17年, 深度学习刚刚流行时, Object ...

  3. IntelliJ IDEA 设置背景图片 随机快捷更换背景图片(附高清4K背景图N张)

    前言 开发过程枯燥乏味,何不为自己工作中添加点乐子呢,除了主题模板,我们可以设置IntelliJ IDEA 的背景图片,换个背景图,换个心情. IntelliJ IDEA 设置背景图片 注意: 必要的 ...

  4. UE5笔记:虚幻引擎反射系统和对象

    虚幻引擎反射系统 使用宏提供引擎和编辑器各种功能,封装你的类.使用虚幻时,可以使用标准的C++类,函数和变量 虚幻中对象的基类是UObject,UCALSS宏的作用是标记UObject的子类,以便UO ...

  5. MMdetection 问题报错 mmdet/evaluation/metrics/coco_metric.py data[‘category_id’] = self.cat_ids[label] IndexError: list index out of range

    方案一:有人说 在自己定义的 conifg文件中增加 metainfo = { 'classes': ('class1','class2', 'class2',), 'palette': [ (220 ...

  6. 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现四

    一.前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势.传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速.便捷需求.这些问题不 ...

  7. fabric基本使用

    fabric简介 ​ Fabric 是一个 Python 的库,同时它也是一个命令行工具.它提供了丰富的同 SSH 交互的接口,可以用来在本地或远程机器上自动化.流水化地执行 Shell 命令.使用 ...

  8. Dell 塔式t440 安装centos (Non-Raid 成功版)

    前情提要 这篇文章是2021年我发布在csdn上,最近搬到博客园了,我把这篇文章重新整理发布下.有的图带有水印 csdn@at_the_Moment正常的,这就是我在csdn的账号. 提前声明一下这是 ...

  9. C#/.NET/.NET Core技术前沿周刊 | 第 14 期(2024年11.18-11.24)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  10. Socket Tcp高密集信息广播转发强度测试

    在有些场中存在着大量的消息广播转发,为了了解.net socket tcp在这方面的性能表现,所以做了一个比较极端信息广播转发强度测试.测试场景是以400个连接信息相互广播为测试用例就是当其中一个连接 ...