最近需要对窗口截图,看到了以下文章:
https://www.cnblogs.com/Evan-fanfan/p/11097850.html

其中有些错误。经过我2天实验,大概搞清楚了3个关键api的用处。注释和代码如下:

# 根据句柄、截图位置和图片路径,对窗口的客户区截图并存到指定位置
# GetDC一类的需要用ReleaseDC释放,CreateDC一类的用DeleteDC释放,DeleteObject则删除一个逻辑笔、画笔、字体、位图、区域或者调色板,
def ClientRect_PrtSc(hwnd, area=None, filename=''):try:hwnd = hwndif filename == '':filename = 'C:\\Users\\tadio\\Desktop\\helper\\pics\\targets\\{}.bmp'.format(hwnd)hwndDC = win32gui.GetDC(hwnd)  # 获取窗口的设备上下文Device Context。GetWindowDC包括了非客户区,而GetDC仅为客户区mfcDC = win32ui.CreateDCFromHandle(hwndDC)  # 获取mfcDCsaveDC = mfcDC.CreateCompatibleDC()  # 创建可兼容DCsaveBitMap = win32ui.CreateBitmap()  # 创建bitmap以保存图片'''MonitorDev = win32api.EnumDisplayMonitors(None, None)  # 获取显示器信息,枚举显示器,笔记本据说可能有问题'''x1, y1, x2, y2 = win32gui.GetClientRect(hwnd)  #GetClientRect获取客户区窗口位置,GetWindowRect获取整个窗口的位置信息x, y, w, h = (0, 0, 0, 0)if area == None:x = 0y = 0w = x2 - x1h = y2 - y1else:x, y, m, n = areaw = m - xh = n - ysaveBitMap.CreateCompatibleBitmap(mfcDC, w, h)  # 为bitmap开辟空间# 对saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)的理解:# 1.mfc相当于一个虚拟屏幕。这里的参数w和h决定了这个屏幕的大小。# 2.屏幕的初始状态是黑色,每个坐标都是#000000# 3.之前有mfcDC = win32ui.CreateDCFromHandle(hwndDC),又有hwndDC = win32gui.GetDC(hwnd)#   mfcDC和hwnd窗口之间建立了某种关联,可以将hwnd窗口中的图像放到虚拟屏幕上saveDC.SelectObject(saveBitMap)  # 将截图保存到saveBitMap中saveDC.BitBlt((0, 0), (w, h), mfcDC, (x, y), win32con.SRCCOPY)# 对saveDC.BitBlt(坐标1, (w, h), mfcDC, 坐标2, win32con.SRCCOPY)的理解:# BitBlt的功能大概是把从hwnd窗口截到的图放到虚拟屏幕上,信息转入saveDC。# 1.坐标1是针对窗口截图的,指定截图放在黑色背景上的位置(指定左上角)# 2.w和h窗口截图的长宽,而坐标2指定了开始截图的位置#   这两个参数决定了从hwnd窗口的哪里截图、截多大的图# 3.mfcDC已经和hwnd窗口建立了关联,所以不需要指定虚拟屏幕从哪个窗口获得截图# 4.SRCCOPY意为将截图直接拷贝到虚拟屏幕中# 接下来的saveBitMap.SaveBitmapFile(saveDC, filename)则是对虚拟屏幕截图并保存到指定位置saveBitMap.SaveBitmapFile(saveDC, filename)# 清除数据win32gui.DeleteObject(saveBitMap.GetHandle())saveDC.DeleteDC()mfcDC.DeleteDC()win32gui.ReleaseDC(hwnd, hwndDC)info('对句柄 {} 标题 {} 的窗口截图并保存'.format(hwnd,win32gui.GetWindowText(hwnd)))except:error('客户区截图 出现错误')

乱写文章害人不浅啊

用Python截图(顶级理解)相关推荐

  1. 关于《Python绝技:运用Python成为顶级黑客》的学习笔记

    本篇文章主要把<Python绝技:运用Python成为顶级黑客>中的代码敲一遍,学学Python安全相关的编程与思路,然后根据具体的情况修改一下代码. 第一章--入门 1.准备开发环境 安 ...

  2. 书籍推荐——Python绝技:运用Python成为顶级黑客

    Python绝技:运用Python成为顶级黑客 本文推荐一本关于信息安全的图书:<Python绝技:运用Python成为顶级黑客>. 当您听到黑客这个词的时候是不是有点激动呢,尤其是顶级黑 ...

  3. 为什么黑客用python-《Python绝技》:运用Python成为顶级黑客

    点击"阅读原文"可以直接购买该书籍. 本月月考的奖品是<Python绝技>两本!敬请期待吧!Xcon&神话行动创始人呆神.Keenteam陈良.鹰总cnhawk ...

  4. 不一定是黑客,也可以是守护神《运用Python成为顶级黑客》

    记得以前看美国的电影时,突然出现一个黑框框,然后突然出现一双手,在键盘上啪啪啪啪飞快地敲击,然后不是控制那片区域断电就是某个人家里断电,或者是某某某近期的出行积累或者开放记录.或者是攻破了某某公司的后 ...

  5. 关于Python多线程的理解

    多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...

  6. python class 是否存在某个变量_一文抵十课,考验你的Python变量是否理解透彻了

    变量是编程的基础概念,Python 的变量也看似很简单,但是如果理解不当,生搬硬套,可能会遇到一些麻烦. 下面用 10 个代码示例展示 Python 的 变量 本质. 快来看看你对 Python 的变 ...

  7. python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...

    https://mp.weixin.qq.com/s/B6pEZLrayqzJfMtLqiAfpQ 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是 ...

  8. python args kwargs 理解_*args和**kwargs在python中的作用

    我发现PYTHON新手在理解*args和**kwargs这两个魔法变量的时候有些困难.他们到底是什么呢? 首先,我先告诉大家一件事情,完整地写*args和**kwargs是不必要的,我们可以只写*和* ...

  9. python中类怎么理解_Python中的列表理解

    python中类怎么理解 In order to create a list, a most obvious and remembered solution is to use a for-loop. ...

  10. Python+OpenCV:理解K-Means聚类(K-Means Clustering)

    Python+OpenCV:理解K-Means聚类(K-Means Clustering) 理论 We will deal this with an example which is commonly ...

最新文章

  1. TIOBE 6 月榜单: Python 有望超越 C 语言成为第一名
  2. matlab摄像头录像保存在哪里,matlab连接摄像头读取视频部分解释
  3. django结合nginx部署
  4. Dvbbs 7.1论坛鼠标指针修改方法
  5. TOMM2018_Unsupervised Person Re-identification: Clustering and Fine-tuning
  6. 集成学习lgb库调参的粒子群方法
  7. SQL Server 2005的Resource数据库
  8. 深度:嵌入式系统的软件架构设计!
  9. mysql导入时区_【MySQL】将时区信息导入MYSQL
  10. Pyecharts 1.7.0制作图表,运行生成的html文件用浏览器打开空白问题(以桑基图为例)
  11. c语言程序设计需要学多久,九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会...
  12. EMD方法基本基本知识
  13. 码农与大神也许只是一步之遥
  14. HMS Core Drive SDK构建使用华为云空间服务应用程序
  15. 在visual studio 2019中使用msvc2015
  16. 细说2类骗人的物联卡,满满的都是套路!
  17. 星历表(DE406+Testeph.f)整理兼求教
  18. 王艳平老师——获取本地信息代码
  19. 发布房源(三)03——配置ImagePicker-图片上传 请求图片路径-headers请求头的写法
  20. c++调用python接口_Python调用有道智云文本翻译API接口实现“智能”伪原创

热门文章

  1. CentOS 7 NIS 配置
  2. 您尚未接受以下SDK组件的许可协议[重复]
  3. 遭遇修改系统时间、使用映像劫持的xibgptd.exe,netdde32.exe等2
  4. 强烈安利!GitHub下载加速神器,简单方便,非常好用!!!
  5. 百度有道雅虎的实习面试经历
  6. 如何让谷歌、百度和雅虎收录你的网站,编入索引
  7. 买了SKS的W530
  8. python泰坦尼克号案例分析课程设计_让课堂充满人文关怀--《泰坦尼克号》案例分析(网友来稿)...
  9. Websocket(一)——原理及基本属性和方法
  10. 黑苹果安装四叶草配置宏碁ec 471g