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之编写类之二方法
Oct 11 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
python实现复制大量文件功能
Aug 31 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 Python
Python configparser模块封装及构造配置文件
Aug 07 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
Python 实现Mac 屏幕截图详解
Oct 05 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 Python
Python 图片添加美颜效果
Apr 28 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
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
JavaScript中的其他对象
2008/01/16 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
python3之微信文章爬虫实例讲解
2017/07/12 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
理想高通滤波实现Python opencv示例
2019/01/30 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Python短信轰炸的代码
2020/03/25 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
如何使用PHP session
2015/04/21 面试题
接口中的方法可以是abstract的吗
2015/07/23 面试题
什么是测试驱动开发(TDD)
2012/02/15 面试题
医学院校毕业生自荐信范文
2014/01/01 职场文书
选秀节目策划方案
2014/06/06 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
活动宣传稿范文
2015/07/23 职场文书
汽车车尾标语大全
2015/08/11 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电