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 xlrd读取datetime类型数据的方法详解
Dec 26 Python
Python3之手动创建迭代器的实例代码
May 22 Python
实例详解Python模块decimal
Jun 26 Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 Python
浅谈Python_Openpyxl使用(最全总结)
Sep 05 Python
python实现tail -f 功能
Jan 17 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
python的json包位置及用法总结
Jun 21 Python
python主要用于哪些方向
Jul 05 Python
Python高并发解决方案实现过程详解
Jul 31 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 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利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
python实现狄克斯特拉算法
2019/01/17 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
总经理岗位职责范本
2014/02/02 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
计算机网络专业求职信
2014/06/05 职场文书
大一新生期末自我评价
2014/09/12 职场文书
学生偷窃检讨书
2014/09/25 职场文书
2014年团总支工作总结
2014/11/21 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang