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 26 Python
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
Python实现插入排序和选择排序的方法
May 12 Python
python之当你发现QTimer不能用时的解决方法
Jun 21 Python
Python用Try语句捕获异常的实例方法
Jun 26 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
python isinstance函数用法详解
Feb 13 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
Django中的模型类设计及展示示例详解
May 29 Python
Python语言规范之Pylint的详细用法
Jun 24 Python
Python创建SQL数据库流程逐步讲解
Sep 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
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
详解Vuex中mapState的具体用法
2017/09/28 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
python冒泡排序简单实现方法
2015/07/09 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
创建服务型党组织实施方案
2014/02/25 职场文书
妇女工作先进事迹
2014/08/17 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
情人节单身感言
2015/08/03 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python
JS class语法糖的深入剖析
2022/07/07 Javascript