这是一个艰难的过程:

我需要能够在屏幕上找到单词的位置和大小(其框架)(第一次出现就足够了,从那里我应该可以得到下一个)。

例如,我希望能够检测(但不限于)Word,Excel和PowerPoint for Mac,以及Safari和其他语言中的单词位置。

解决方案应尽快。我应该能够每秒至少找到5-6个字,并使用尽可能少的CPU时间。

到目前为止,我的想法是:


窗口的屏幕快照/图形上下文中的OCR(可在Mac OS X 10.4上运行并且可以在商业产品中使用的任何良好的开放源代码框架?)。 Evernote非常擅长于发现图像中的单词。我不知道它是使用定制的内部引擎还是开放源代码/商业引擎,但是如果这是一种“有效”的解决方案,那将是我想使用的那种引擎。理想情况下,我将在活动应用程序的窗口中检测单词的框架(如何获取另一个应用程序的框架?)。
在Quartz文本绘制上获取某种“钩子”,并在绘制单词时拦截单词的位置(乍看之下似乎不太可行!)。
AppleScript,但这在很大程度上取决于应用程序提供的API(我认为您无法从我所见的Word文档中获得单词的坐标),而且速度很慢。
...出于想法...


我的目标是根据包含段落文本的字符串,以正确的顺序获取段落中所有单词的框架。

预先感谢您的任何提示!

最佳答案

首先,您可能要看一下QuickCursor's code。它通过AX Accessibility APIs从许多不同的应用程序中检索文本。现在,它不会抓住单词的像素位置,但至少会返回与该UI元素中的文本关联的NSString。当然,这意味着相关应用必须支持这些API。我不知道MS Office套件是否会。此外,它仅支持可编辑的元素,因此Safari中无法编辑的网页也不起作用。但这可能为您提供一些想法的起点。

看一下QCUIElement.{m,h},然后在QCAppDelegate.mbeginQuickCursorEdit:)中实现...他抽象的QCUIElement的实现似乎很简单:

QCUIElement *focusedElement = [QCUIElement focusedElement];
id value = focusedElement.value;


编辑:啊哈!签出辅助功能检查器示例代码:UIElementInspector。它实际上可以获取页面上元素的AXPosition。现在,这不是一个字一个字,而是我们越来越近了。它会告诉您文本块的x,y位置以及该文本块中包含的单词。

07-27 13:20
查看更多