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 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
Python实现远程调用MetaSploit的方法
Aug 22 Python
Python多进程multiprocessing用法实例分析
Aug 18 Python
Python实现简单的语音识别系统
Dec 13 Python
Python中的Numpy矩阵操作
Aug 12 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
python pycharm的安装及其使用
Oct 11 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 Python
Python中的 enumerate和zip详情
May 30 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中使用Oracle数据库(2)
2006/10/09 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
详解JS预解析原理
2020/06/16 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python脚本处理空格的方法
2016/08/08 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
Python中作用域的深入讲解
2018/12/10 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
英国现代绅士品牌:Hackett
2017/12/17 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
艺术设计专业个人求职信
2013/09/21 职场文书
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
招聘单位介绍信
2014/01/14 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
小学评语大全
2014/04/22 职场文书
党员活动日总结
2014/05/05 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书