Python 屏幕取词功能实现思路

前言

近期接到了一个项目,雇主需求是仿照【有道词典】
【欧路词典】【金山词霸】实现类似的屏幕取词功能。

当鼠标移到屏幕上任何一处显示的字符串时,有道词典将会自动将该词的释义展示出来。

起初我认为取词这个功能非常好实现,所以我便爽快地答应接下了这个项目。

买家提出的要求:不要按任何快捷键,鼠标悬停上去就显示该词的释义。

技术难点一

因为笔者只会熟练地使用Python以及Java。这两门语言对系统底层的开发支持的都不是很好。但是,相较于Java而言,Python拥有较多的库,可以在该方面实现更多的功能,所以我使用了Python来进行编写。

笔者准备使用Pyhook3来进行函数Hook。但是Pyhook3的使用以及安装都已经超出了我的能力范围。安装好之后,并不能实现屏幕取词的功能。所以笔者就另外构思了一种思路。

思路一:利用好剪贴板

既然没有直接取词的方法,那么我们可以就换个思路。

据资料显示,python有很多库是可以实现读取剪贴板信息的,最简洁好用的就是Pyperclip。

有了Pyperclip,我们就可以方便地操作剪贴板了。

加之Pyhook3的全局事件监听,我们监听鼠标双击事件,双击之后,电脑就会自动为我们选中单词,在这个时候,通过模拟按键Ctrl + C按下,实现复制将单词复制到剪贴板。此时,我们就可以通过剪贴板开心地读取了。

具体流程图如下:

Created with Raphaël 2.2.0鼠标双击系统自动选中单词保存当前剪贴板信息程序延迟输出Ctrl + V程序读取剪贴板中单词程序将保存剪贴板内容还原进入数据库匹配单词

但是,这样做也有问题:看似这个过程非常简单,但是实际操作便遇到了困难。

技术难点二

Pyhook3开启监听需要用到Pumpmessage函数,这个函数一旦运行就会阻塞程序的运行,也就是说监听必须要单独存在于一个线程。根据实测发现,这个线程必须要是主线程

好巧不巧,笔者使用tkinter的mainloop函数,也必须要是主线程才能够正常运行。

所以,这两个库都需要主线程,那么这个问题究竟怎么解决呢?

我在国内外网站上查询了大量的资料,最终发现,国外网友自己实现了线程调度,解决了mainloop和Pumpmessage的线程冲突问题。然而,奈何笔者的程序体量太大,无法进行实际使用这种方法,会造成程序卡死,性能开销过大等一系列问题。

这种问题解决不了,就要尝试绕开它。

思路二:救星——Pynput

Tkinter or Pyhook3?

考虑一下把Tkinter换成PyQt的工作量,果断决定干Pyhook3。

Pyhook3的性能实在不高,对于很多基本组件也有冲突,再三考虑之下决定抛弃好不容易安装好的Pyhook3。o(╥﹏╥)o

寻找了良久之后,我最后选择了Pynput。

Pynput支持全局事件监听,还有模拟按键和鼠标。这个库主要分为两个模块——Keyboard和Mouse。

最最最重要的是,这个库对于多线程应用支持地很好

最终,这个问题终于得以解决。关于主线程的争夺之战,也终于在Pyhook3的让步之下,得以有一个最终的胜利。

技术难点三

虽然取词功能实现了,但是经过多次修改,代码已经不是碳基生物能读懂的了。

根据程序员原则:可运行、可实现功能的代码,不可再行修改。 最终笔者决定停止继续修改,反正也是个人开发,自己差不多能懂就可以了。

然而,我的战争并没有结束…

这个原理实现的大部分软件都可以正常取词,唯独客户最需要的microsoft word不可以。

本着探究的精神,我去尝试了一下对面的WPS OFFICE,发现在关闭悬浮工具栏的情况下是可以正常工作的,只不过没有完全正常工作。

出现的问题是,剪贴板老是读取到之前存储的内容。

直到最终,这个问题也没有得以解决。笔者猜测应该是本身这些软件就用到了鼠标钩子,导致hook之间会有冲突?

继续绕路

“程序员的天职是绕开问题” ——鲁迅

因为客户非常友好,很好说话,最后决定使用OCR方案。

具体原理很简单,屏幕框选截图,然后传入tesseract进行ocr识别,最终在特定位置输出查询结果。思路非常清晰,也比之前的解决方案稳定了很多。

tesseract OCR在大尺度识别下的准确率还是可圈可点的,加之后续的手动修正功能接口,其实正常使用的问题是不用担心了。

结语

本文章只限于给大家提供解决屏幕取词这个问题的思路。据了解,网上还有许多引用C++和C# dll库的,但是因为平台兼容性和稳定性等原因,笔者这里并没有采用。有兴趣的同学可以去尝试一下,应该在特定平台上效果会很好。

最后,希望大家都可以持之以恒地“绕开问题”,收获绕开问题的智慧。

最后的最后,希望读了本文的各位,遇到bug的几率大大减小,早日完成自己的项目!!!

Python 屏幕取词功能?你知道怎么实现吗?相关推荐

  1. python屏幕取词_GetWord 3.3 屏幕取词

    1. 缘起 要搞一个作弊软件,需要把屏幕上的试题取下来. 据说针对IE的取词很难,所以也就打消了自己开发的念头,找一找好用的控件. 发现了两个可以用的,一个是金山词霸的XdictGrb.dll文件,一 ...

  2. python屏幕取词getword_专业屏幕取词引擎GetWord

    GetWord是一款专业的屏幕取词组件(控件),它可以帮助您在公司产品中快速便捷地集成屏幕取词功能,有效降低软件开发成本.GetWord是世界上第一款也是目前唯一一款全面支持Windows和Adobe ...

  3. python屏幕取词getword_专业屏幕取词引擎-Getword

    GetWord是一款专业的屏幕取词组件(控件),它可以帮助您在公司产品中快速便捷地集成屏幕取词功能,有效降低软件开发成本.GetWord是世界上第一款也是目前唯一一款全面支持Windows Vista ...

  4. 今天发现有道桌面词典打开屏幕取词功能时,会导致mremote,visionapp等软件僵死!!!

    大发现:有道桌面词典打开屏幕取词功能时,会导致mremote,visionapp等软件僵死!!!

  5. [IE9] 开发IE9上的屏幕取词功能

    "屏幕取词"是词典软件(如:金山词霸)里面一个必要功能. 在IE9中,由于使用Direct2D接口取代GDI做页面渲染,原来基于GDI接口的屏幕取词技术将无法继续正常工作. 因此, ...

  6. python屏幕取词getword_GetWord Demo(屏幕取词软件)

    GetWord Demo是一款可以帮助用户捕捉文字的软件,当你需要捕捉文字的时候就可以选择这款软件截图捕捉,从而让用户可以更快完成文字复制,也让用户更快输入文字,有时候需要对一个文件的内容抄写,但是该 ...

  7. python屏幕取词getword_GetWord Demo(屏幕取词软件) V5.0.1 官方版

    GetWord Demo是款简单实用的截图捕捉文字工具.它可以帮助用户获得截图中的文字,高度精准识别,随意抓取,操作简单,功能强大,非常好用. [主要功能] 1.支持Unicode. 2.支持选择取词 ...

  8. python屏幕取词getword_GetWord下载-GetWord(屏幕取词软件)v2.6免费版-ucbug软件站

    GetWord是一款专业好用的屏幕取词引擎,是一个快速可靠的专业文本捕获库.它可以轻松地将文本捕获功能添加到您的软件中,支持多种语言,十分实用. 基本简介 GetWord是一个专业人士快速可靠用于在屏 ...

  9. 火狐用有道词典不能屏幕取词的解决办法

    2019独角兽企业重金招聘Python工程师标准>>> 1 取消火狐浏览器自动使用硬件加速功能 2 有道词典安装OCR插件强力屏幕取词功能 转载于:https://my.oschin ...

最新文章

  1. shell的各种运行模式?
  2. numpy.transpose()用法
  3. Vue.js教程学习笔记
  4. input禁止光标_表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  5. kibana. 登陆
  6. java实现多路分发
  7. Nginx配置中的log_format用法梳理(设置详细的日志格式)
  8. 为什么Java中类方法不能访问实例方法
  9. 如果__name__ =='__main__':在Python中怎么办?
  10. [LeetCode] Two Sum
  11. 360浏览器 - 自定义切换内核 meta标签 总结
  12. Linux虚拟文件系统之文件系统安装(sys_mount())
  13. 【机器人学】机器人运动学基础
  14. zigbee网关 zstack CC2530添加iic温度传感器lm75a
  15. pip国内镜像(清华大学镜像)
  16. web安全[网易白帽子课程笔记+体会]-03web安全工具
  17. Doris:部署Broker
  18. 【LeetCode】935. Knight Dialer 解题报告(Python)
  19. 【转】蓝牙通信-打开和关闭蓝牙设备
  20. Js逆向-猿人学(1)源码混淆

热门文章

  1. android 前摄屏幕补光,前后800万摄像头/配前置补光灯_富可视 M2_手机Android频道-中关村在线...
  2. 同时查询多家快递物流,并分析出延误一天未更新的单号
  3. windows api 扫雷游戏
  4. QTimer 定时器
  5. 如何解决手机耳机插入电脑声音不清晰/很杂
  6. TDH集群数据拷贝及元数据迁移
  7. CefSharp 自定义缓存目录
  8. 同花顺_知识_庄家技法_2吸货技法、3缓步推高股价
  9. 5个微信小程序UI组件库
  10. 渗透测试学习 一、基础知识