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自动化工具日志查询分析脚本代码实现
Nov 26 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
python+django快速实现文件上传
Oct 24 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
Java分治归并排序算法实例详解
Dec 12 Python
pandas把dataframe转成Series,改变列中值的类型方法
Apr 10 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
python-numpy-指数分布实例详解
Dec 07 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
Python 用户输入和while循环的操作
May 23 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函数的实现原理及性能分析(二)
2015/05/13 PHP
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
js正确获取元素样式详解
2009/08/07 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
Python实现的双色球生成功能示例
2017/12/18 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
python lambda的使用详解
2021/02/26 Python
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
大学生个人求职信范文
2013/09/21 职场文书
应用数学自荐书范文
2013/11/24 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
小区门卫值班制度
2014/01/24 职场文书
行政文秘岗位职责范本
2014/02/10 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
幼儿园辞职信
2015/05/13 职场文书
预备党员群众意见
2015/06/01 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python