1

这是一个艰难的:

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

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

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

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

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

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

提前感谢您的任何提示!

4

2 回答 2

2

作为一个起点,您可能想看看QuickCursor 的代码它通过AX 辅助功能 API从许多不同的应用程序中检索文本。现在,它不会抓取单词的像素位置,但它至少会返回与该 UI 元素中的文本关联的 NSString。当然,这意味着相关应用程序必须支持这些 API;我不知道 MS Office 套件是否会。此外,它只支持可编辑的元素,因此 Safari 中不可编辑的网页也不起作用。但它可能会给你一些想法的起点。

看一下QCUIElement.{m,h},然后是QCAppDelegate.m( beginQuickCursorEdit:)中的实现……他抽象的QCUIElement的实现好像很简单:

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

编辑:啊哈!查看 Accessibility Inspector 示例代码:UIElementInspector。它实际上可以获取页面上元素的 AXPosition。现在,这不是一个字一个字,但我们越来越近了。它会告诉您文本块的 x、y 位置以及文本块中包含的单词。

于 2009-10-30T21:40:39.730 回答
1

这是可能的,但很难可靠地工作。您可以使用Spell Catcher 的 Direct Connect功能来查看示例。

于 2009-10-30T23:48:27.700 回答