Python编写屏幕截图程序方法


Posted in Python onFebruary 18, 2015

正在编写的程序用的很多Windows下的操作,查了很多资料。看到剪切板的操作时,想起以前想要做的一个小程序,当时也没做,现在正好顺手写完。

功能:按printscreen键进行截图的时候,数据保存在剪切板里面,很不方便。比如游戏的时候截一个瞬间的图片,但你不能退出游戏保存图片,不方便多次截图。而我也不喜欢安装各种软件,所以准备写这个工具。

思路:一个是自定义快捷键,截图,保存。考虑到很可能各种冲突,取消。然后还是用按printscreen来截图,然后从剪切板读取图片数据,保存。想法是,先监听键盘按键,当printscreen按键时,读取剪切板内容,最后保存图片到指定位置。

1 监听键盘按键:从网上找到资料,安装pywin32,pyhook。链接:http://sourceforge.net/projects/pyhook/,http://sourceforge.net/projects/pywin32/。教程:http://sourceforge.net/apps/mediawiki/pyhook/index.php?title=PyHook_Tutorial。

2 读取剪切板内容,也是需要pywin32.文档在:[Pythonpath]\Lib\site-packages\PyWin32.chm,在线的:http://timgolden.me.uk/pywin32-docs/index.html

文档中给出的几种格式都不是图片保存的数据,Google搜索“Standard Clipboard Formats”,链接:http://msdn.microsoft.com/en-us/library/windows/desktop/ff729168%28v=vs.85%29.aspx,所有的格式,主要就是1-17.

好在文档中有一个函数:GetPriorityClipboardFormat,可以返回剪切板中的格式,从一个迭代器中。于是手动输入找到了,y有时为6,win32con.CF_TIFF,还会为2。当然这里直接用返回数据就行了,不需要知道是什么。

主要用到:

OpenClipboard,CloseClipboard,GetPriorityClipboardFormat,GetClipboardData,这几个函数文档都有介绍,主要说说CloseClipboard,官方文档上讲,不要在剪切板里放置对象后调用CloseClipboard。

3 保存图片:

到这里发现可以直接用PIL模块,直接解决问题,上面太曲折T_T。

可以直接使用ImageGrab.grab() 进行抓屏,或者使用ImageGrab.grabclipboard()从剪切板获取图像。

 

最后变成,监听按键,按下printscreen后,用pil截图保存。T_T 感觉还不如设置快捷键,这样应该少占用内存。

Python 相关文章推荐
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
Python中%r和%s的详解及区别
Mar 16 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
python对日志进行处理的实例代码
Oct 06 Python
python学生信息管理系统(初级版)
Oct 17 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
python 实现单例模式的5种方法
Sep 23 Python
python中pyqtgraph知识点总结
Jan 26 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 #Python
Python内置函数Type()函数一个有趣的用法
Feb 18 #Python
Python中使用MELIAE分析程序内存占用实例
Feb 18 #Python
Python中的__SLOTS__属性使用示例
Feb 18 #Python
Python contextlib模块使用示例
Feb 18 #Python
Python中使用Inotify监控文件实例
Feb 14 #Python
Python中实现的RC4算法
Feb 14 #Python
You might like
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
python搭建微信公众平台
2016/02/09 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
python实现一组典型数据格式转换
2018/12/15 Python
Python实现Event回调机制的方法
2019/02/13 Python
毕业生实习鉴定
2013/12/11 职场文书
五年级语文教学反思
2014/01/30 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
北京天坛导游词
2015/02/12 职场文书
任命通知范文
2015/04/21 职场文书
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js