Python 自动唤醒窗口截图脚本

目录
  • 1.准备
  • 2.如何获取窗口坐标
  • 3. 还原最小化窗口
  • 4.截图

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

截图的操作用途最为广泛,你可以用它配合定时工具,定时检测某个程序的运行情况;甚至可以根据截图做一些辅助性的决策,比如玩类似于《连连看 》的 游戏时,对相同类型的方块进行标记,辅助你玩游戏。

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

1.准备

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

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

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

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

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

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

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

pip install pypiwin32
pip install pillow

2.如何获取窗口坐标

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

import win32api, win32con, win32gui
def get_window_pos(name):
    name = name
    handle = win32gui.FindWindow(0, name)
    # 获取窗口句柄
    if handle == 0:
        return None
    else:
        return win32gui.GetWindowRect(handle)
x1, y1, x2, y2 = get_window_pos('暴雪战网')
print(x1,y1,x2,y2)

结果:

>> python 1.py
# (349,83,1549,1013)

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

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

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

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

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

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

2.win32gui 高亮窗口

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

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

import win32api, win32con, win32gui
def get_window_pos(name):
    name = name
    handle = win32gui.FindWindow(0, name)
    # 获取窗口句柄
    if handle == 0:
        return None
    else:
        # 返回坐标值和handle
        return win32gui.GetWindowRect(handle), handle
(x1, y1, x2, y2), handle = get_window_pos('暴雪战网')
text = win32gui.SetForegroundWindow(handle)

这样就能将被覆盖到底层的窗口放到最上层,如下图所示。

3. 还原最小化窗口

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

import win32api, win32con, win32gui
def get_window_pos(name):
    name = name
    handle = win32gui.FindWindow(0, name)
    # 获取窗口句柄
    if handle == 0:
        return None
    else:
        # 返回坐标值和handle
        return win32gui.GetWindowRect(handle), handle
(x1, y1, x2, y2), handle = get_window_pos('暴雪战网')
win32gui.SendMessage(handle, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)
# 发送还原最小化窗口的信息
win32gui.SetForegroundWindow(handle)
# 设为高亮

效果如图所示:

4.截图

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

import win32api, win32con, win32gui

def get_window_pos(name):
    name = name
    handle = win32gui.FindWindow(0, name)
    # 获取窗口句柄
    if handle == 0:
        return None
    else:
        # 返回坐标值和handle
        return win32gui.GetWindowRect(handle), handle
(x1, y1, x2, y2), handle = get_window_pos('暴雪战网')
win32gui.SendMessage(handle, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)
# 发送还原最小化窗口的信息
win32gui.SetForegroundWindow(handle)
# 设为高亮
from PIL import Image, ImageGrab
img_ready = ImageGrab.grab((x1, y1, x2, y2))
# 截图
img_ready.show()
# 展示

效果如下:

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

到此这篇关于Python 自动唤醒窗口截图脚本的文章就介绍到这了,更多相关Python窗口截图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python基于win32实现窗口截图

    本文实例为大家分享了python基于win32实现窗口截图的具体代码,供大家参考,具体内容如下 获取窗口句柄和标题 import win32gui hwnd_title = dict() def _get_all_hwnd(hwnd, mouse): if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd): hwnd_title.update({hwnd: w

  • Python爬虫之Selenium实现窗口截图

    前言:由程序去执行的操作不允许有任何误差,有些时候在测试的时候未出现问题,但是放到服务器上就会报错,而且打印的错误信息并不十分明确.这时,我在想如果在脚本执行出错的时候能对当前窗口截图保存,那么通过图片就可以非常直观地看出出错的原因.WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口. 本章中用到的关键方法如下: get_screenshot_as_file():截图 from selenium import webdriver driver = we

  • Python 自动唤醒窗口截图脚本

    目录 1.准备 2.如何获取窗口坐标 3. 还原最小化窗口 4.截图 利用Python自带的win32api和win32con.win32gui等模块,我们能执行许多windows下的自动化操作.比如两个窗口的自动点击操作,从软件中的窗口复制文本到txt中,甚至是截图操作. 截图的操作用途最为广泛,你可以用它配合定时工具,定时检测某个程序的运行情况:甚至可以根据截图做一些辅助性的决策,比如玩类似于<连连看 >的 游戏时,对相同类型的方块进行标记,辅助你玩游戏. 下面就讲讲如何使用 win32a

  • Python实现自动玩连连看的脚本分享

    目录 序言 实现步骤 全部代码 序言 最近女朋友在玩连连看,玩了一个星期了还没通关,真的是菜. 我实在是看不过去了,直接用python写了个脚本代码,一分钟一把游戏. 快是快,就是联网玩容易被骂,嘿嘿~ 实现步骤 模块导入 import cv2 import numpy as np import win32api import win32gui import win32con from PIL import ImageGrab import time import random 窗体标题 用于定

  • python自动脚本的pyautogui入门学习

    本文介绍了pyautogui入门学习,分享给大家,也给自己留个笔记 安装 pip install pyautogui 学习使用 加载模块 import pyautogui 获取信息类 电脑屏幕的左上角是位置(0,0),向右X坐标增加,向下Y坐标增加 # 获取屏幕尺寸 screenWidth, screenHeight = pyautogui.size() # 获取鼠标当前位置 currentMouseX, currentMouseY = pyautogui.position() 进行操作类 鼠标

  • 为了顺利买到演唱会的票用Python制作了自动抢票的脚本

    目录 知识点: 开发环境: 先导入本次所需的模块 第一步,实现免登录 确定目标,设置全局变量 初始化加载 登录调用设置cookie 获取cookie 登录 打开浏览器 第二步,抢票并下单 判断元素是否存在 选票操作 选择座位 下单操作 抢票完成,退出 测试代码是否成功 最后看下效果如何 知识点: 面向对象编程 selenium 操作浏览器 pickle 保存和读取Cookie实现免登陆 time 做延时操作 os 创建文件,判断文件是否存在 开发环境: 版 本:anaconda5.2.0(pyt

  • python自动查询12306余票并发送邮箱提醒脚本

    由于车票难抢,有时需要的车票已经售空,而我们需要捡漏,便可使用这个脚本. 具体实现了,自动查询某一车票的余票数量,当数量产生变化时,将自动发送QQ邮件到对于的邮箱进行提醒. 其中,发送邮箱的部分详情可参考我上一篇博文:Python 发送邮件 (smtp) QQ邮箱 脚本使用了python + selenium + chrome webdriver,需要先配置好三者的环境. 具体使用时候,需自行改变代码中的 邮箱信息.出发站.到达站.车次.日期.以及到相应查询页面中找到对应车票的html id:

  • 使用python写一个自动浏览文章的脚本实例

    创建python文件fling.py,代码如下: #!/usr/bin/env monkeyrunner import time from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice device = MonkeyRunner.waitForConnection(5) loop = 0 loop_back = 0 # fling up def scrollUpFling(): device.touch(100, 500,

  • Python实现自动整理文件的脚本

    前言 工作上的文档和资料好几个月没整理了,因为平常太忙都是随手往桌面丢.整个桌面杂乱无章全是文档和资料.几乎快占满整个屏幕了,所有我必须要整理一下了.但是手动整理太费时间了,于是我想到了python. 示例 import os import glob import shutil ''' @Author: huny @date: 2020.12.06 @function: 桌面整理 ''' class FileType(): def __init__(self): self.filetype =

  • 用Python自动清理电脑内重复文件,只要10行代码(自动脚本)

    给定一个文件夹,使用Python检查给定文件夹下有无文件重复,若存在重复则删除 主要涉及的知识点有: os模块综合应用 glob模块综合应用 利用filecmp模块比较两个文件 步骤分析 该程序实现的逻辑可以具化为: 遍历获取给定文件夹下的所有文件,然后通过嵌套循环两两比较文件是否相同,如果相同则删除后者. 实现问题的关键就变成了 如何判断两个文件是否相同? 在这里我们可以使用filecmp模块,来看看官方的介绍文档: filecmp.cmp(f1, f2, shallow=True) 比较名为

  • python自动生成sql语句的脚本

    描述: 工作中在数据库中创建表时,当字段很多时,比较麻烦,开发一个工具,可在excel中写好字段英文名和中文名,然后通过py生成脚本或直接在库中生成表 脚本: import tkinter from tkinter import * import tkinter.messagebox from tkinter import scrolledtext import xlrd import pymysql import os #从excel中获取字段项,组合建表语句 def get_create_s

随机推荐