超方便的 Python 自动唤醒窗口截图脚本

利用Python自带的win32api和win32con、win32gui等模块,我们能执行许多windows下的自动化操作。比如两个窗口的自动点击操作,从软件中的窗口复制文本到txt中,甚至是截图操作。

截图操作是最通用的,可以配合计时工具定期检测一个程序的运行情况;甚至可以根据截图做出一些辅助决策,比如在玩类似连连看的游戏时。标记相同类型的框以帮助您玩这个游戏。

[En]

Screenshot operation is the most versatile, you can use it with timing tools to regularly detect the operation of a program; you can even make some auxiliary decisions according to the screenshot, such as when playing games similar to Lianliankan. Mark the same type of box to help you play the game.

许多人向蟒蛇学习,不知道从哪里开始。<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Many people learn from pythons and don't know where to start.</font>*</details>

很多人学习寻找python,掌握了基本语法之后,不知道在哪里的案例上手。

许多可能已经了解此案的人并没有学习到更高级的知识。<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Many people who may already know the case do not learn more advanced knowledge.</font>*</details>

这三类人,我为你提供了一个很好的学习平台,免费获取视频教程、电子书以及课程源代码!<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>These three categories of people, I provide you with a good learning platform, free access to video tutorials, e-books, as well as course source code!</font>*</details>

QQ群:101677771

欢迎加入,一起讨论学习

下面就讲讲如何使用 win32api 实现自动唤醒并截图的操作。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda: Python数据分析与挖掘好帮手—Anaconda ,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器,它有许多的优点: Python 编程的最好搭档—VSCode 详细指南 。

请选择以下任何一种方式输入命令以安装依赖项:

[En]

Please choose any of the following ways to enter the command to install dependencies:

  1. Windows 环境 打开 Cmd (开始-运行-CMD)。

  2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。

  3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

<span class="hljs-attr">pip <span class="hljs-string">install pypiwin32
<span class="hljs-attr">pip <span class="hljs-string">install pillow</span></span></span></span>

2.如何获取窗口坐标

通过 win32gui 的 FindWindow 函数,我们能轻易地找到任何进程的窗口:

<span class="hljs-keyword">import win32api, win32con, win32gui
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">get_window_pos<span class="hljs-params">(name):
    name = name
    handle = win32gui.FindWindow(<span class="hljs-number">0, name)
    </span></span></span></span></span></span>

结果:

输出结果中的元组即是窗口信息(x1, y1, x2, y2):

(x1, y1)是窗口左上角的坐标。

(x2, y2)是窗口右下角的坐标。

我们可以利用这个信息配合PIL进行截图。但是在这之前,我们还要解决两个问题:

  1. 该窗口并不在当前的界面上,被其他的软件覆盖到底层中,这时候需要高亮窗口。

  2. 该窗口被最小化怎么办?

2.win32gui 高亮窗口

为了使得被叠在底层的窗口能放到最上层显示,我们需要拿到窗口的handle,对其执行高亮操作。

使用 win32gui 可以非常简单地实现这个特性,我们刚刚获得坐标信息的时候已经得到handle了,调用一个SetForegroundWindow方法即可:

<span class="hljs-attr">import <span class="hljs-string">win32api, win32con, win32gui
<span class="hljs-attr">def <span class="hljs-string">get_window_pos(name):
    <span class="hljs-attr">name = <span class="hljs-string">name
    <span class="hljs-attr">handle = <span class="hljs-string">win32gui.FindWindow(0, name)
</span></span></span></span></span></span></span></span>

这样,覆盖到底部的窗口可以放置在顶部,如下图所示。

[En]

In this way, the window that is covered to the bottom can be placed on the top, as shown in the following figure.

  1. 还原最小化窗口

还有一种特殊情况就是窗口被缩小了,这时候我们就需要还原最小化窗口,其实也非常简单,只要利用win32gui和win32con向该窗口发送一个信息即可。

<span class="hljs-keyword">import win32api, win32con, win32gui
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">get_window_pos<span class="hljs-params">(name):
    name = name
    handle = win32gui.FindWindow(<span class="hljs-number">0, name)
    </span></span></span></span></span></span>

效果如图所示:

4.截图

最后可以试一下我们的完整代码了,针对指定的坐标使用PIL模块进行截图,代码如下:

<span class="hljs-keyword">import win32api, win32con, win32gui

<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">get_window_pos<span class="hljs-params">(name):
    name = name
    handle = win32gui.FindWindow(<span class="hljs-number">0, name)
    </span></span></span></span></span></span>

效果如下:

这个功能可好用了,比如说你需要监控一个窗口的运行状况,不可能时时刻刻都去观察它,你可以使用while循环不断调用这个窗口截图脚本,先截图进行保存。

Original: https://www.cnblogs.com/sn5200/p/15879406.html
Author: Python可乐的呀
Title: 超方便的 Python 自动唤醒窗口截图脚本

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/510096/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球