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中的try和finally和with方法
May 05 Python
使用python实现接口的方法
Jul 07 Python
python对于requests的封装方法详解
Jan 03 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
Python 依赖库太多了该如何管理
Nov 08 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
python能自学吗
Jun 18 Python
Python中logger日志模块详解
Aug 04 Python
python如何操作mysql
Aug 17 Python
python中实现栈的三种方法
Dec 19 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 Python
如何利用Matlab制作一款真正的拼图小游戏
May 11 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和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
2011/07/03 PHP
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
2019/09/23 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
Python如何快速实现分布式任务
2017/07/06 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
python如何控制进程或者线程的个数
2020/10/16 Python
Django URL参数Template反向解析
2020/11/24 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
创伤外科专业推荐信范文
2013/11/19 职场文书
物业管理毕业生个人的求职信
2013/11/30 职场文书
生物学学生自我评价
2014/01/17 职场文书
大学生个人事迹材料
2014/01/21 职场文书
工厂会计员职责
2014/02/06 职场文书
趣味运动会广播稿
2015/08/19 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python
Hive HQL支持2种查询语句风格
2022/06/25 数据库
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers