问候大家,
我和一个朋友正在讨论一个新项目的可能性:一个翻译程序,只要你把鼠标放在任何控件的任何字上,即使是静态的,不可编辑的,也会popup一个翻译。 我知道有很多浏览器插件在网页上做这种事情, 我们正在考虑如何在系统范围内(在Windows上)进行操作。
当然,关键的难点在于弄清楚用户正在盘旋的这个词。 我知道MSAA和自动化,但据我所知,这些东西只允许您获取控件的全部内容,而不是鼠标的特定字。
我偶然发现了这个(专有)应用程序,它几乎完全是我们想要做的: http : //www.gettranslateit.com/
不知何故,他们能够得到用户几乎在任何应用程序中徘徊的确切词(这似乎在一些应用程序,特别是Windows资源pipe理器中遇到麻烦)。 它甚至以某种方式从明显的自定义绘制控件中抓取文本。 起初我以为它一定是使用OCR。 但即使当我缩小字体到文本变得完全不可读时,它仍然可以完美地识别文字。 (但是,如果我将字体更改为Wingdings,它不会识别任何内容,但也许这是devise?)
任何想法如何实现这个看似不可能的任务?
编辑:它不适用于Wingdings,但它确实与其他一些无意义的字体,所以我已经证实它不能OCR。
您可以捕获输出文本到显示器的GDI调用,然后确定光标位于哪个单词的边框。
那么,对于GDI控件,您可以获得控件的位置和大小,并且通常可以获取字体信息。 例如,使用静态文本控件,您可以使用WM_GETFONT 。 然后,一旦你有了,你可以得到相对于控件的位置的鼠标的位置,并使用其中一个字体函数 ,可能像GetTextExtentPoint32找出什么是在光标下。 我很确定答案在于这个方向
您可以在另一个应用程序上运行dumpbin /imports
并查看它们正在调用的API。