2009-10-30 77 views
1

在屏幕上(位置和大小),这里是一个艰难的一个:查找单词的框架使用可可或碳

我需要能够找到一个字在屏幕上的位置和大小(它的边框)(其第一发生就足够了,从那里我应该可以得到下一个)。

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

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

这里是我想的这么远:

  • OCR在窗口的截图/图形上下文(任何好的开源框架,在Mac OS X 10.4的工作原理,并能在商业产品中使用?) 。 Evernote很擅长在图片中查找单词。我不知道它是否使用自定义内部引擎或开源/商业引擎,但如果这是一个“有效”解决方案,那将是我想要使用的引擎类型。理想情况下,我会检测活动应用程序窗口中的单词框架(如何获取其他应用程序的框架?)。
  • 在Quartz绘图文本中获取某种“钩子”,并在绘制时拦截该单词的位置(乍一看似乎不太可行!)。
  • AppleScript,但它很大程度上取决于应用程序提供的API(我不认为你可以从我所见过的Word文档中获取单词的坐标),它的速度很慢,
  • ...的想法...

我的目标是让所有的单词的帧的基础上含该段的文本字符串正确的顺序一个段落。

在此先感谢您的任何提示!

+0

如果我们有任何想法,为什么要这样做,推荐适当的解决方案可能会更容易。 – 2009-10-30 20:00:01

+0

如果我们知道他想要做到这一点,以满足他祖母的垂死之愿,是否会更容易找到解决方案? – 2009-10-31 19:09:58

+0

恩说:Elise:P。我想我明确了我的目标。没有违法NSD。 – Form 2009-11-02 13:50:25

回答

2

作为一个出发地,你可能想看看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位置,以及文本块中包含的词语。

+0

谢谢!我之前查看过可访问性API,但遇到了与您相同的限制。在许多应用程序中似乎没有办法在AXTextArea中获取单词的位置。 Office 2004似乎没有使用Cocoa控件,因此没有文档的辅助功能元素。(不幸的是,这是我必须绝对支持的一个应用程序套件。) – Form 2009-11-02 14:38:58

+0

似乎没有办法可靠地获取单词的位置屏幕,所以我想这是最合适的答案。这将用于获取屏幕上文本字段的位置。 – Form 2009-11-12 18:49:45