2009-10-30 50 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