当前位置: 首页 > news >正文

【Python-随笔】使用Python实现屏幕截图

使用Python实现屏幕截图

环境配置

下载pyautogui

pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple/

下载OpenCV

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/

下载PyQT5

pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/

下载pypiwin32

pip install pypiwin32 -i https://pypi.tuna.tsinghua.edu.cn/simple/

具体实现

【1】

说明

  • 使用pyautogui方法实现截屏;

代码

import pyautogui
import cv2
import numpy as np# 下面的数字分别代表:左上角横向坐标,左上角纵向坐标,截取图像的宽度,截取图像的高度;
img = pyautogui.screenshot(region=[0, 0, 1902, 1080])
# 将获取的图像转换成二维矩阵形式,然后再将RGB转成BGR
# 因为`imshow`默认通道顺序是`BGR`,而`pyautogui`默认是`RGB`所以要转换一下
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)cv2.imshow("截屏", img)
cv2.waitKey(0)

注释

  • 此方法不能指定获取指定程序的窗口,因此窗口也不能被遮挡;

【2】

说明

  • 使用win32gui方法实现截屏;

代码

《1》

  • 获取目标程序窗口的句柄和标题;
  • 打印所有窗口的hwndtitle
  • 根据窗口句柄就可以进行指定截图了;
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: win32gui.GetWindowText(hwnd)})win32gui.EnumWindows(get_all_hwnd, 0)for h, t in hwnd_title.items():if t != "":print(h, t)
import win32gui# GetDesktopWindow 获得代表整个屏幕的一个窗口(桌面窗口)句柄
hd = win32gui.GetDesktopWindow()# 获取所有子窗口
hwndChildList = []win32gui.EnumChildWindows(hd, lambda hwnd, param: param.append(hwnd), hwndChildList)for hwnd in hwndChildList:print("句柄:", hwnd, "标题:", win32gui.GetWindowText(hwnd))# f.write("句柄:" + str(hwnd) + " 标题:" + win32gui.GetWindowText(hwnd) + '\n')

结果

3802250 mouseControle – OpenCVDemo.py
3278598 此电脑

《2》

  • 使用PyQt5进行全屏的截取操作;
  • 如果想截取特定的窗口,只需要将C:/Windows/system32/cmd.exe换成上一个程序中打印的title,并且保证那个窗口没有被你最小化即可;

代码

import sys
import win32gui
from PyQt5.QtWidgets import QApplication
# 这个是全屏窗口
hwnd = win32gui.FindWindow(None, 'C:/Windows/system32/cmd.exe')
# 这个是指定程序
# hwnd = win32gui.FindWindow(None, win32gui.GetWindowText(3212524))
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
img = screen.grabWindow(hwnd).toImage()
img.save(r"C:\Users\SUNxRUN\Desktop\screenshot.jpg")
# 前置窗口 win32gui.SetForegroundWindow(hwnd)

《3》

  • 暂时废弃;
  • 实时使用win32gui截屏用Mat格式显示的核心程序;

代码

import win32gui
import cv2
import numpy as np
from PIL import ImageGrab  # 操作图像
hwnd = win32gui.FindWindow(None, 'QQMail - Inbox - 360极速浏览器X 21.0')#第二个参数需要用二、a、那个程序运行来获得
while True:x_start, y_start, x_end, y_end = win32gui.GetWindowRect(hwnd)# 坐标信息box = (x_start, y_start, x_end, y_end)image = ImageGrab.grab(box)img=cv2.cvtColor(np.asarray(image),cv2.COLOR_RGB2BGR)cv2.imshow('Img',img)cv2.waitKey(1)

相关文章:

  • Java研学-反射与内省
  • WebGL笔记:js中矩阵库的使用
  • linux常用命令-find命令与scp命令详解(超详细)
  • Qt Rsa 加解密方法使用(pkcs1, pkcs8, 以及文件存储和内存存储密钥)
  • tomcat运行项目时,前端页面中文乱码
  • 强化学习------时序差分(Temporal-Difference Learning)
  • Failed building wheel for opencv-python which use PEP 517
  • navicat某些表为什么不按主键排序
  • 力扣题:字符串的反转-11.21
  • 专升本期间部分C语言程序整理
  • 项目demo —— GPT 聊天机器人
  • 开源编译器LLVM-源码编译
  • 吴恩达《机器学习》11-1-11-2:首先要做什么、误差分析
  • HarmonyOS到底值不值得学?看完你就懂了
  • C# WPF 基础教程——触发器、行为、形状、变换与透明、路径和几何图形
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • crontab执行失败的多种原因
  • ES6之路之模块详解
  • JavaScript新鲜事·第5期
  • java第三方包学习之lombok
  • Java面向对象及其三大特征
  • PAT A1017 优先队列
  • php ci框架整合银盛支付
  • vue总结
  • Web Storage相关
  • 规范化安全开发 KOA 手脚架
  • 回流、重绘及其优化
  • 前端技术周刊 2019-02-11 Serverless
  • 人脸识别最新开发经验demo
  • 使用agvtool更改app version/build
  • Java性能优化之JVM GC(垃圾回收机制)
  • zabbix3.2监控linux磁盘IO
  • 通过调用文摘列表API获取文摘
  • #NOIP 2014# day.2 T2 寻找道路
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $NOIp2018$劝退记
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .net 反编译_.net反编译的相关问题
  • .NET 反射的使用
  • .net 生成二级域名
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • /run/containerd/containerd.sock connect: connection refused
  • ?php echo ?,?php echo Hello world!;?
  • [ Linux ] Linux信号概述 信号的产生
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • []T 还是 []*T, 这是一个问题
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [Angular 基础] - 数据绑定(databinding)
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件