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

一、问题描述

  • 用户的应用场景非常简单:一个无主播的线上弹幕游戏,需要定时开启和关闭直播,直播平台是在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. .NET 8.0 开源在线考试系统(支持移动端)

    前言 推荐一款基于.NET 8.0 免费开源跨平台在线考试系统,系统不仅支持桌面端,还特别优化了移动端的用户体验. 通过本系统可以轻松搭建自己的在线考试平台,实现随时随地的测试与评估. 本文将详细介绍 ...

  2. Python--json_tools用法

    安装 pip install json_tools 使用 输出导读: 上面的输出显示的是b相对于a的变化: 1) b和a都有键'rd',但是b相对a键'rd'的值发生了变化,由原来的yanan变为Ya ...

  3. 4G模组软件指南 | json数据处理深度学习篇

    针对4G模组软件的json数据处理,我已做出如下示例分享给大家,以4G模组Air780E为例: 1.JSON介绍 JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式 ...

  4. 使用Tomcat插件开发WEB应用

    在Eclipse中,可以安装Tomcat插件,实现WEB应用的开发调试工作,Tomcat插件还可以支持WEB应用的热部署. 一.安装配置Tomcat插件 可以通过拷贝安装和Links方式安装Tomca ...

  5. java——棋牌类游戏五子棋(singlewzq1.0)之一

    这是本人最近一段时间写的五子棋的java代码,大体框架都实现了,一些细节还需要优化. package basegame; import java.awt.Color; import java.awt. ...

  6. Understanding ANTLR Grammar Files

    Are you confused by all the different sections of an Antlr grammar file, wondering what each one doe ...

  7. Git之常用文件

    git项目中的特殊文件, 常见文件有.gitignore, .gitkeep 1) .gitkeep git默认是不允许提交一个空的目录到版本库上的, 可以在空的文件夹里面建立一个.gitkeep文件 ...

  8. PythonDay1Base

    PythonDay1Base 变量 即python运行过程中可以发生改变的量,如同数学中的未知数X,将一个确定的量赋值给变量. 变量定义原则 由英文大小写,数字以及下划线_组成 不能以数字开头 不能以 ...

  9. Android运行时请求权限封装

    @ 目录 1 介绍 2 测试用例设计 3 实现 4 用例测试 5 总结 本文目的:"借助透明Activity封装一个易于调用的权限请求模块" 1 介绍 Android权限的校验和申 ...

  10. 启动Node.js前端项目

    跟前端同事联调的时候,有时前端同事要跟其他后端同事联调,心想就自己启个前端项目,这样前端同事跟其他后端同事联调的时候,我可以先自己调来试试. 安装Node.js,NPM,NVM等,一气呵成.将前端项目 ...