python 调用Win10自带截图工具
文章目录
前言
一、所需库
二、具体方法
1.引入库
2.设置资源变量
3.功能编写
三、总结
1.整体思路
2.为什么要开一个线程?
前言
win10 系统截图软件更新之后,允许我们使用 win 健 + shift 键 + s 键来调出系统截图。在我们使用系统工具进行截图后,截取的图片会保存在剪贴板中。其他功能模块可以通过访问剪贴板来获取截图,并且调用方式较为简单。此功能的主要目的是为《实现一个文字识别(图片转文字)工具》添加 截取图片 直接转换成文字功能,感觉比以前的 添加图片转换功能更方便 。
一、所需库
除了上一篇文章中需要的 sys, time,PySide2,threading 外,我们还需要处理图像和调用Windows平台接口的模块。win32clipboard,win32api 和 win32con 是 windows 平台的python应用程序编程接口 PyWin32 模块提供的重要子模块。python3直接使用 pip install pywin32 即可联网下载。 PIL(Python Imaging Library)是Python一个强大方便的图像处理库,本文使用其访问保存剪贴板中的图片,用于获得截图工具截取的图片。python3使用 pip install pillow 即可联网下载安装。
二、具体方法
1.引入库
使用 import 导入所需的库和模块。代码如下(示例):
import win32clipboard
import win32api, win32con
from PIL import ImageGrab, Image #从剪贴板保存图片
2.设置资源变量
设置一个图片保存的路径,这个路径是图片保存的位置,方便图片转文字功能调取。代码如下(示例):
#设置资源变量
CAPTURE_PNG_URL = './asset/capture.png'
3.功能编写
点击截取按钮功能代码如下(示例):
@Slot() def on_cap_pic_clicked(self):#点击截获图片win32clipboard.OpenClipboard()win32clipboard.EmptyClipboard() #清空剪贴板win32clipboard.CloseClipboard()self.hide()time.sleep(1)try:win32api.keybd_event(0x5B, 0, 0, 0) # 0x5B --> left win key win32api.keybd_event(0x10, 0, 0, 0) # 0x10 --> SHIFTwin32api.keybd_event(0x53, 0, 0, 0) # 0x53 --> Swin32api.keybd_event(0x5B, 0, win32con.KEYEVENTF_KEYUP, 0) win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0)except:print('keyboard event does not successful.')sys.exit(1)t = threading.Thread(target=self.capture_screen)t.setDaemon(True) #设置守护进程,跟随主进程运行t.start()t.join() #同步线程用,等待线程结束image = ImageGrab.grabclipboard() # 获取剪贴板文件self.show()image.show() #debugimage.save(CAPTURE_PNG_URL)# 调用之前编写的 ocr_util.py 进行图片转文字# file_urls = CAPTURE_PNG_URL #默认文件名称# if len(file_urls) > 0:# self.textEdit.clear()# with open(file_urls, 'rb') as fp:# file_bytes = fp.read()# self.run_ocr_async(file_bytes)
第3到5行为了在点击按钮的时候清空剪贴板内容,方便判断是否截取成功。第6行为了在点击该截图按钮的时候隐藏主界面,这里面注意不加第7行的话会出现主界面关闭后又出现的问题。第9-18行通过win32api接口模拟键入win 健 + shift 键 + s 键来调出系统截图,即虚拟键盘码。
调用的capture_screen函数代码如下(示例):
def capture_screen(self):#监听点击,右键重新截取# 考虑先清空剪贴板然后查看剪贴板判断是否结束。1月13日while(True):image = ImageGrab.grabclipboard() # 获取剪贴板文件if image:breakelse:time.sleep(1)
三、总结
1.整体思路
- 点击截取按钮
- 清空剪贴板
- 隐藏软件界面
- 然后模拟键入win 健 + shift 键 + s 键来调出系统截图
- 开一个等待截取完毕的线程
- 截取完毕后保存图片
2.为什么要开一个线程?
如果不开等待截取图片过程的线程,则在模拟键入调出系统截图后,程序直接继续执行,没有时间用鼠标截取图片。之前的思路是使用PyHook库监听鼠标右键抬起,由于版本和系统的兼容性问题,没有成功。然后改变了一下思路,先清空剪贴板,再持续查询剪贴板是否有图片,进一步判断图片是否截取成功。
这里说一下 pyHook 模块,本文使用该模块做鼠标监听功能,判断用户是否完成截图。这个模块使用 pip install pyhook 总是报错。所以我们去网站上下载相应的 .whl 文件进行安装。相关的文件如图1.所示。
本文使用的 python 版本为 3.7.5,win10-64位操作系统。因此选择了pyHook-1.5.1-cp37-cp37m-win_amd64.whl 这个文件。然后使用 pip 安装,命令和结果如图2。pip install 后面的路径是自动生成的,将.whl文件拖入CMD命令行中即可。
python 调用Win10自带截图工具相关推荐
- wi ndows自带截图工具,win10自带截图工具怎么使用?win10用自带截图工具截图的方法...
win10系统自带有一个截图工具,可以帮助大家快速截取屏幕内容,非常实用.虽然网上有很多第三方截图软件,但是还要下载,比较麻烦.虽然QQ和微信也有截图功能,但每次都要登录,比较麻烦.那么win10自带 ...
- Win10自带截图工具SnippingTool.exe截图锁屏异常一例
异常现象 正常的情况下,在使用Win10自带截图工具SnippingTool.exe截图时,截图工具界面会悬浮在截图界面之上,通过取消按钮.按ESC键或ALT+C快捷键可退出截图. 异常情况发生在多次 ...
- 禁用Win10自带截图工具快捷键(Shift+Win+S)
由于在微信之前,多年使用QQ的缘故,已经习惯了使用Ctrl+Alt+A进行截图,虽然QQ后来还专门提供了TIM(Office-QQ),但仍然渐渐的以微信为主,TIM甚至已经很少登录,之前登录也仅仅是为 ...
- win10 自带截图工具 SnippingTool
■位置 %windir%\system32\SnippingTool.exe (C:\Users\>echo %windir% C:\WINDOWS) snipping 英[ˈsnɪp ...
- win10系统自带截图工具快捷键
描述:win10系统自带截图工具快捷键 快捷键: win键+Shift+s
- 快捷键设置_win10自带截图工具如何使用 、设置快捷键
win10 系统中有不少非常有用的内置工具,很多用户都不知道该如何使用它们. 截图功能是日常使用电脑时经常使用的.一般来说截图功能 QQ 和微信应该是使用最多的.但是 win10 系统也内置了截图工具 ...
- mac idea用自带的maven还是_苹果电脑自带截图工具怎么用?mac自带截屏工具使用技巧分享
一说到截图工具我们脑袋里最先跳出来应该是 QQ 和微信等社交软件自带的截图工具,这里小编为大家推荐的是经常被忽昭略的mac自带截屏工具.也许你想不到苹果自带截图工具功能是十分的强大的. mac自带截屏 ...
- win7系统自带截图工具快捷键是什么?怎么设置快捷键
win7自带的截图工具很好,很强大,比从网上下载的截图工具好用多了,很少会出现问题.但是它能不能像QQ截图工具一样可以使用快捷键呢?今天小编和大家分享下心得,希望能够给你的工作带来快捷. 工具/原料 ...
- win10系统picpick截图工具自动滚动截长图方法
描述:win10系统picpick截图工具自动滚动截长图方法 步骤: 使用截图工具,使用顶部菜单栏,选择截取滚动窗口功能 此时会自动识别滚动窗口,单机滚动条,即可自动滚动,如果只滑动一次就结束了,请将 ...
最新文章
- JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法
- GitHub Checks API帮助应用实现进一步的持续集成
- WebRTC AEC算法
- lamp mysql开机自启_centos下设置自启动和配置环境变量的方法
- 一个redis的连接库的实现
- 计算机小知识分享,分享几小个计算机操作技巧
- Mr.J--JS学习(Clone)
- 服务器用户设置备份,用户配置文件状态变成“备份”
- rabbitmq页面出现/etc/rabbitmq/rabbitmq.config(not found)解决方法
- VLAN专题之三:VLAN的访问链接
- 三层交换机VLAN间路由
- 实验-网络攻击(字典攻击)
- 精选目标检测3——yolo1、yolo2、yolo3和SSD的网络结构汇总对比
- IOS swift 清理缓存
- 如何搭建一个完整的视频直播系统?
- Spring security5.5.7出现Encoded password does not look like BCrypt异常
- Chain validation failed
- 思科关闭日志_详解Cisco(思科)路由器的故障日志
- discuz3.4安装php,Discuz!X3.4论坛源码下载 及 全新安装教程
- WMI使用小工具——WMI代码生成器(转)