转载或者引用本文内容请注明来源及原作者
一、问题描述
- 用户的应用场景非常简单:一个无主播的线上弹幕游戏,需要定时开启和关闭直播,直播平台是在Windows端的某播伴侣。
二、分析需求
- 首先需要定时任务管理。在特定的时间进行应用的管理,并且能够支持用户进行修改
- 其次需要在对应应用上点击验证。某播平台需要一系列的点击验证,需要在开启后进行这一连串的操作,实现上线直播
- 最后为了方便实现逻辑
三、步步为营
- 通过需求的分析,并且我们想要快速的在Windows上实现该需求,简单查找资料,发现Python语言能够很方便的实现。
这里我们选择的环境为Python3.11,搭建好环境后开始我们的编码吧!
定时任务(schedule)
-
schedule 是我们常见的Python中处理定时任务的老伙计了。通过import导入我们的schedule,简单的几行代码即可实现:
py#每天定时开启和关闭(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 就能帮我将应用打开。
py#注意这里的cmd内的文件路径,\字符需要转义,变成\\ cmd='你的exe的文件路径' myApp = os.popen(cmd)
窗口获取(win32gui)
-
今天的主角win32gui,这个伙伴能够做许多了不起的事情:
- 通过窗口名获取窗口句柄(获取窗口句柄后我们才能做更多的事情)
- 通过窗口句柄+窗口下的窗口名,能够构建整个窗口树(也就是你能拿到所有展示在你面前的窗口)
- 强制聚焦我们选择的窗口句柄(唤起我们想要的窗口)
- 通过窗口句柄,获取窗口位置和大小(这个对我们的自动化点击非常有帮助)
-
下一步,我知道我当前应用的窗口叫啥名字呢?**Spy++**是个非常好用的工具。
- Spy++继承在Visual Studio编辑器下,我们可以通过下载Visual Studio,这里的社区版本也是有带的,位于我们的工具菜单栏下:
- 打开之后长这样:
- 完全看不懂咋办?别慌,有搜索工具。点击Spy++窗口上方的搜索按钮\查找窗口:
- 将瞄准器对准我们想要的窗口就能捕获到我们的窗口了!这时候Spy++列表就能够ping到选择的窗口选项,右键窗口选项,选择属性。打开属性面板,查看对应类名和标题名。
- Spy++继承在Visual Studio编辑器下,我们可以通过下载Visual Studio,这里的社区版本也是有带的,位于我们的工具菜单栏下:
-
大火烹饪!通过代码将两者串联起来。
py#handle为句柄 handle = win32gui.FindWindow(类名, 标题名) #获取handle下的子窗口句柄 child = win32gui.FindWindowEx(handle, None, 子标题名, None)
模拟点击(pywinauto)
-
pywinauto 内有一个mouse对象,能够帮助我们去点击对应的窗口位置,实现基本的鼠标相关操作。
py#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进程服务,一个简单的自动化窗口管理器就能够实现了。这里最重要的要点就是成功捕获到窗口句柄,句柄是重要的操作对象。通过句柄,我们能够实现更复杂更繁琐的需求。