文章目录

前言

一、所需库

二、具体方法

1.引入库

2.设置资源变量

3.功能编写

三、总结

1.整体思路

2.为什么要开一个线程?


前言

win10 系统截图软件更新之后,允许我们使用 win 健 + shift 键 + 键来调出系统截图。在我们使用系统工具进行截图后,截取的图片会保存在剪贴板中。其他功能模块可以通过访问剪贴板来获取截图,并且调用方式较为简单。此功能的主要目的是为《实现一个文字识别(图片转文字)工具》添加 截取图片 直接转换成文字功能,感觉比以前的 添加图片转换功能更方便 


一、所需库

除了上一篇文章中需要的 sys, time,PySide2,threading 外,我们还需要处理图像和调用Windows平台接口的模块。win32clipboardwin32apiwin32con 是 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 键 + 键来调出系统截图,即虚拟键盘码。

调用的capture_screen函数代码如下(示例):

def capture_screen(self):#监听点击,右键重新截取# 考虑先清空剪贴板然后查看剪贴板判断是否结束。1月13日while(True):image = ImageGrab.grabclipboard() # 获取剪贴板文件if image:breakelse:time.sleep(1)

三、总结

1.整体思路

  • 点击截取按钮
  • 清空剪贴板
  • 隐藏软件界面
  • 然后模拟键入win 健 + shift 键 + 键来调出系统截图
  • 开一个等待截取完毕的线程
  • 截取完毕后保存图片

2.为什么要开一个线程?

如果不开等待截取图片过程的线程,则在模拟键入调出系统截图后,程序直接继续执行,没有时间用鼠标截取图片。之前的思路是使用PyHook库监听鼠标右键抬起,由于版本和系统的兼容性问题,没有成功。然后改变了一下思路,先清空剪贴板,再持续查询剪贴板是否有图片,进一步判断图片是否截取成功。

这里说一下 pyHook 模块,本文使用该模块做鼠标监听功能,判断用户是否完成截图。这个模块使用 pip install pyhook 总是报错。所以我们去网站上下载相应的 .whl 文件进行安装。相关的文件如图1.所示。

图1. pyHook 版本

本文使用的 python 版本为 3.7.5,win10-64位操作系统。因此选择了pyHook-1.5.1-cp37-cp37m-win_amd64.whl 这个文件。然后使用 pip 安装,命令和结果如图2。pip install 后面的路径是自动生成的,将.whl文件拖入CMD命令行中即可。

图2. pyHook 安装命令与结果

python 调用Win10自带截图工具相关推荐

  1. wi ndows自带截图工具,win10自带截图工具怎么使用?win10用自带截图工具截图的方法...

    win10系统自带有一个截图工具,可以帮助大家快速截取屏幕内容,非常实用.虽然网上有很多第三方截图软件,但是还要下载,比较麻烦.虽然QQ和微信也有截图功能,但每次都要登录,比较麻烦.那么win10自带 ...

  2. Win10自带截图工具SnippingTool.exe截图锁屏异常一例

    异常现象 正常的情况下,在使用Win10自带截图工具SnippingTool.exe截图时,截图工具界面会悬浮在截图界面之上,通过取消按钮.按ESC键或ALT+C快捷键可退出截图. 异常情况发生在多次 ...

  3. 禁用Win10自带截图工具快捷键(Shift+Win+S)

    由于在微信之前,多年使用QQ的缘故,已经习惯了使用Ctrl+Alt+A进行截图,虽然QQ后来还专门提供了TIM(Office-QQ),但仍然渐渐的以微信为主,TIM甚至已经很少登录,之前登录也仅仅是为 ...

  4. win10 自带截图工具 SnippingTool

    ■位置 %windir%\system32\SnippingTool.exe (C:\Users\>echo %windir%     C:\WINDOWS) snipping  英[ˈsnɪp ...

  5. win10系统自带截图工具快捷键

    描述:win10系统自带截图工具快捷键 快捷键: win键+Shift+s

  6. 快捷键设置_win10自带截图工具如何使用 、设置快捷键

    win10 系统中有不少非常有用的内置工具,很多用户都不知道该如何使用它们. 截图功能是日常使用电脑时经常使用的.一般来说截图功能 QQ 和微信应该是使用最多的.但是 win10 系统也内置了截图工具 ...

  7. mac idea用自带的maven还是_苹果电脑自带截图工具怎么用?mac自带截屏工具使用技巧分享

    一说到截图工具我们脑袋里最先跳出来应该是 QQ 和微信等社交软件自带的截图工具,这里小编为大家推荐的是经常被忽昭略的mac自带截屏工具.也许你想不到苹果自带截图工具功能是十分的强大的. mac自带截屏 ...

  8. win7系统自带截图工具快捷键是什么?怎么设置快捷键

    win7自带的截图工具很好,很强大,比从网上下载的截图工具好用多了,很少会出现问题.但是它能不能像QQ截图工具一样可以使用快捷键呢?今天小编和大家分享下心得,希望能够给你的工作带来快捷. 工具/原料 ...

  9. win10系统picpick截图工具自动滚动截长图方法

    描述:win10系统picpick截图工具自动滚动截长图方法 步骤: 使用截图工具,使用顶部菜单栏,选择截取滚动窗口功能 此时会自动识别滚动窗口,单机滚动条,即可自动滚动,如果只滑动一次就结束了,请将 ...

最新文章

  1. JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法
  2. GitHub Checks API帮助应用实现进一步的持续集成
  3. WebRTC AEC算法
  4. lamp mysql开机自启_centos下设置自启动和配置环境变量的方法
  5. 一个redis的连接库的实现
  6. 计算机小知识分享,分享几小个计算机操作技巧
  7. Mr.J--JS学习(Clone)
  8. 服务器用户设置备份,用户配置文件状态变成“备份”
  9. rabbitmq页面出现/etc/rabbitmq/rabbitmq.config(not found)解决方法
  10. VLAN专题之三:VLAN的访问链接
  11. 三层交换机VLAN间路由
  12. 实验-网络攻击(字典攻击)
  13. 精选目标检测3——yolo1、yolo2、yolo3和SSD的网络结构汇总对比
  14. IOS swift 清理缓存
  15. 如何搭建一个完整的视频直播系统?
  16. Spring security5.5.7出现Encoded password does not look like BCrypt异常
  17. Chain validation failed
  18. 思科关闭日志_详解Cisco(思科)路由器的故障日志
  19. discuz3.4安装php,Discuz!X3.4论坛源码下载 及 全新安装教程
  20. WMI使用小工具——WMI代码生成器(转)

热门文章

  1. 各种风格404错误页面html模板源码30多套高大尚响应式网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应。
  2. 一篇文章带你了解,App 测试工具
  3. PWM的周期和占空比是如何计算
  4. 小白都能看懂的go语言包管理工具DEP详解
  5. css悬停动画,CSS卡片悬停动画效果实现
  6. fastrcnn报错
  7. 基于CUDA的GPU并行计算技术实现网课课表编排
  8. 算法提高——JOE的算数
  9. 一顿操作猛如虎,3000 行代码重构成 15 !
  10. 大唐移动android面试题,大唐移动面试经验