python3应用windows api对后台程序窗口及桌面截图并保存的方法

发布时间:2020-09-12 09:52:46

来源:脚本之家

阅读:82

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())

以上这篇python3应用windows api对后台程序窗口及桌面截图并保存的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持亿速云。

python怎样保存在桌面_python3应用windows api对后台程序窗口及桌面截图并保存的方法...相关推荐

  1. python怎么保存到桌面_python3应用windows api对后台程序窗口及桌面截图并保存的方法...

    python的版本及依赖的库的安装 #版本python 3.7.1 pip install pywin32==224 pip install numpy==1.15.3 pip install ope ...

  2. python3应用windows api对后台程序窗口及桌面截图并保存

    目录 python的版本及依赖的库的安装 对后台窗口截图 对桌面截图 python的版本及依赖的库的安装 #版本python 3.7.1 pip install pywin32==224 pip in ...

  3. Windows 批处理创建当前目录程序快捷方式到桌面

    Windows 批处理创建当前目录程序快捷方式到桌面 我需要实现从这个文件夹中双击脚本,在桌面创建 Chrome 的快捷方式到桌面,并通过修改参数指定它的用户目录 --user-data-dir=Us ...

  4. python微博自动评论转发_python3 调用新浪微博api实现自动发布评论

    新浪微博开放平台提供了丰富的API接口,利用这些接口,开发者能够开发出独具特色的微博应用.但是,大部分接口都需要用户授权给应用,应用利用授权得到的Access Token来调用相应的接口来获取内容. ...

  5. win10计算机从桌面消失了,Windows10家庭版程序窗口在桌面上消失了解决方法

    相信大家对于电脑非常不陌生吧,当你遇到Win10程序窗口桌面上消失了怎么办这个问题该怎么解决吗?不知道了吧,接下来小编就以程序窗口时所遇到的Win10程序窗口桌面上消失了怎么办问题来给大家讲讲,看看小 ...

  6. Windows API 空壳应用程序

    #include <Windows.h> //包含应用程序所需要的数据类型和数据结构的定义LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPAR ...

  7. MFC程序解析以及使用cl.exe、link.exe编译连接Windows API和MFC程序

    目录 一.实验目的 二.实验配置 三.MFC程序创建和解析 (一).创建MFC程序 (二).分析MFC程序 四.使用cl.exe和link.exe (一).Windows API 1.实验代码 2.实 ...

  8. windows删除桌面ie_从Windows 8“开始”屏幕启动IE的桌面版本

    windows删除桌面ie There are two versions of Internet Explorer in Windows 8, one you can only launch from ...

  9. windows下rocketMq后台无窗口启动sever和brocker

    1.新建nameServer.txt内容如下: Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c E:/rock ...

  10. C++ WINDOWS API 第2章 Windows API概要

    目录 2.1       Windows数据类型.. 1 2.1.1       Windows数据类型示例.. 1 2.1.2       Windows 数据类型与标准C 数据类型的关系.. 5 ...

最新文章

  1. 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析
  2. django新建php文件,在Python的Django框架中创建语言文件
  3. Mysql高可用集群-解决MMM单点故障
  4. RGB 24和YUY2相互转换
  5. 13 PP配置-生产主数据-BOM相关-定义修正参数
  6. Service混合开启笔记(startService+bindService)
  7. 解决了一个堆破坏问题
  8. 【MFC开发(6)】复选框按钮控件Check Box
  9. caffee学习——图像切割
  10. java导出数据库_如何在Java中从整个数据库导出数据?
  11. win10文件夹全屏的快捷键
  12. python获取北京时间
  13. 计算机组成及linux基础
  14. android开发非-转动圆形菜单
  15. 2022年上海落户全部方式!落户上海政策变化及条件汇总!
  16. 朝花夕拾:Java中实现对EXCEL文件的读取
  17. 资深EMC工程师总结:EMC整改流程及常见问题
  18. ETL:WJLYZQWDD
  19. squirrelmail(小松鼠web邮件系统)
  20. 关于对数的有趣问题:lnx趋近于负无穷的速率与lnx趋近于正无穷的速率一样吗?对数的平方趋近于无穷的速率相当于x的几次方?

热门文章

  1. 181025词霸有道扇贝每日一句
  2. Atitit 提升科技影响力 目录 1. 大原则 2 1.1. 科技强人必须是创新型[ 2 1.2. 要有一定的体量和规模 2 2. 创新能力主要科技指标 2 2.1. 领域科技大奖与荣誉 2 2
  3. Atitit 短信验证的漏洞 目录 1.1. APP读取短信 1 1.2. 手机上访问的业务来说,短信验证码就没那么独立了 1 1.3. 短信保管箱” 1 1.4. 自动把短信备份到云端的功能。 2
  4. Atitit js canvas的图像处理类库attilax总结与事业
  5. paip.网站提示SESSION过期 登录过期 以及二次登录的问题
  6. 华泰证券:科技无界,赋能金融新生态
  7. Web开发之旅--使用Flask 实现REST架构的API
  8. 无公式无数学内容下,如何理解加密与解密知识?
  9. 资管新规这样规定,我的货基该怎么办?
  10. SQLite: 关于日期的标准化问题