python调用win32接口进行截图的示例


Posted in Python onNovember 11, 2020

python的版本及依赖的库的安装

#版本python 3.7.1
pip install pywin32==224
pip install numpy==1.15.3
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16
pip install Pillow-PIL==0.1.dev0

对后台窗口截图

#对后台窗口截图
import win32gui, win32ui, win32con
from ctypes import windll
from PIL import Image
import cv2
import numpy
 
#获取后台窗口的句柄,注意后台窗口不能最小化
hWnd = win32gui.FindWindow("NotePad",None) #窗口的类名可以用Visual Studio的SPY++工具获取
#获取句柄窗口的大小信息
left, top, right, bot = win32gui.GetWindowRect(hWnd)
width = right - left
height = bot - top
#返回句柄窗口的设备环境,覆盖整个窗口,包括非客户区,标题栏,菜单,边框
hWndDC = win32gui.GetWindowDC(hWnd)
#创建设备描述表
mfcDC = win32ui.CreateDCFromHandle(hWndDC)
#创建内存设备描述表
saveDC = mfcDC.CreateCompatibleDC()
#创建位图对象准备保存图片
saveBitMap = win32ui.CreateBitmap()
#为bitmap开辟存储空间
saveBitMap.CreateCompatibleBitmap(mfcDC,width,height)
#将截图保存到saveBitMap中
saveDC.SelectObject(saveBitMap)
#保存bitmap到内存设备描述表
saveDC.BitBlt((0,0), (width,height), mfcDC, (0, 0), win32con.SRCCOPY)
 
#如果要截图到打印设备:
###最后一个int参数:0-保存整个窗口,1-只保存客户区。如果PrintWindow成功函数返回值为1
#result = windll.user32.PrintWindow(hWnd,saveDC.GetSafeHdc(),0)
#print(result) #PrintWindow成功则输出1
 
#保存图像
##方法一:windows api保存
###保存bitmap到文件
saveBitMap.SaveBitmapFile(saveDC,"img_Winapi.bmp")
 
##方法二(第一部分):PIL保存
###获取位图信息
bmpinfo = saveBitMap.GetInfo()
bmpstr = saveBitMap.GetBitmapBits(True)
###生成图像
im_PIL = Image.frombuffer('RGB',(bmpinfo['bmWidth'],bmpinfo['bmHeight']),bmpstr,'raw','BGRX',0,1)
##方法二(后续转第二部分)
 
##方法三(第一部分):opencv+numpy保存
###获取位图信息
signedIntsArray = saveBitMap.GetBitmapBits(True)
##方法三(后续转第二部分)
 
#内存释放
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hWnd,hWndDC)
 
##方法二(第二部分):PIL保存
###PrintWindow成功,保存到文件,显示到屏幕
im_PIL.save("im_PIL.png") #保存
im_PIL.show() #显示
 
##方法三(第二部分):opencv+numpy保存
###PrintWindow成功,保存到文件,显示到屏幕
im_opencv = numpy.frombuffer(signedIntsArray, dtype = 'uint8')
im_opencv.shape = (height, width, 4)
cv2.cvtColor(im_opencv, cv2.COLOR_BGRA2RGB)
cv2.imwrite("im_opencv.jpg",im_opencv,[int(cv2.IMWRITE_JPEG_QUALITY), 100]) #保存
cv2.namedWindow('im_opencv') #命名窗口
cv2.imshow("im_opencv",im_opencv) #显示
cv2.waitKey(0)
cv2.destroyAllWindows()

对桌面截图

截图整个桌面

import win32gui
import win32ui
import win32con
import win32api
 
# 获取桌面
hdesktop = win32gui.GetDesktopWindow()
# 分辨率适应
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
# 创建设备描述表
desktop_dc = win32gui.GetWindowDC(hdesktop)
img_dc = win32ui.CreateDCFromHandle(desktop_dc)
# 创建一个内存设备描述表
mem_dc = img_dc.CreateCompatibleDC()
# 创建位图对象
screenshot = win32ui.CreateBitmap()
screenshot.CreateCompatibleBitmap(img_dc, width, height)
mem_dc.SelectObject(screenshot)
# 截图至内存设备描述表
mem_dc.BitBlt((0, 0), (width, height), img_dc, (0, 0), win32con.SRCCOPY)
# 将截图保存到文件中
screenshot.SaveBitmapFile(mem_dc, 'screenshot.bmp')
# 内存释放
mem_dc.DeleteDC()
win32gui.DeleteObject(screenshot.GetHandle())

以上就是python调用win32接口进行截图的示例的详细内容,更多关于python调用win32接口的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python获取各操作系统硬件信息的方法
Jun 03 Python
python 对象和json互相转换方法
Mar 22 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
解决pandas read_csv 读取中文列标题文件报错的问题
Jun 15 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
Django框架实现分页显示内容的方法详解
May 10 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
python基础详解之if循环语句
Apr 24 Python
python 下载m3u8视频的示例代码
Nov 11 #Python
pytorch简介
Nov 11 #Python
Python远程linux执行命令实现
Nov 11 #Python
python 实现简单的计算器(gui界面)
Nov 11 #Python
python海龟绘图之画国旗实例代码
Nov 11 #Python
python 实现倒计时功能(gui界面)
Nov 11 #Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 #Python
You might like
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
thinkphp分页集成实例
2017/07/24 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
Python 专题三 字符串的基础知识
2017/03/19 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
详解Python locals()的陷阱
2019/03/26 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
QML使用Python的函数过程解析
2019/09/26 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
详解python中各种文件打开模式
2020/01/19 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
党风廉政承诺书
2014/03/27 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
公司收款委托书范本
2014/09/20 职场文书
现实表现材料范文
2014/12/23 职场文书
2015年前台接待工作总结
2015/05/04 职场文书