Java-Windows系统下应用程序的屏幕取词功能是如何实现的?
如题,例如有道词典的屏幕取词功能,为什么它还能在PDF文档上取词?屏幕取词的原理是什么,如果用Java语言应该怎样写?谢谢大家。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如题,例如有道词典的屏幕取词功能,为什么它还能在PDF文档上取词?屏幕取词的原理是什么,如果用Java语言应该怎样写?谢谢大家。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
1.这里说的通用,意思就是调用微软GDI的文字绘制函数的那一类。
2.某些软件可能有用独立的图形引擎(库),例如用了freetype的文字引擎。这种可能就需要特殊处理方式,例如pdf,chrome浏览器。
3.可能有很多其他需要特定的方法。
4.java的话可能需要使用C/C++写一个库(dll)支撑。
(本人未实际做过这方面或者去写过类似的功能,对java也不懂,以上仅为猜测)
以前看过,大致了解,但没做过。
首先Hook与输出文字有关的API,比如GDI,GDI+里的相关函数,可能直接hook较底层的就可以。
然后向窗口发出重绘消息。窗口接到这个消息后,会刷新显示,刷新显示肯定就要调用相关的函数了。
程序画文本时,就能截获到函数请求,分析计算鼠标位置与实际画出位置,计算光标前后的文本,向前向后可以找到一个英文单词。
有些PDF文档不是完全图片的,是包含了文档文本,图形,字体等信息的,打开时是根据这些数据实时画写出来的。应该是叫Post Script格式。
Java貌似不能做Hook,那就不能实现的。
还有种方法,通过向控件发送特定的消息,可以获得文本,但仅限于窗口标题啊,label的文本啊,编辑框文本啊之类的,只是部分系统控件支持,对于往DC表面画出的文本没法获取。
C#.Net里使用钩子技术(Hook),Java应该也有相关的包吧
JAVA要实现这个功能,只能通过JNI自己写个native库了。定义好接口,分别实现native code,理论上也可以做到跨平台的。