Trovare la cornice di una parola (posizione e dimensioni) sullo schermo usando Cocoa o Carbon

StackOverflow https://stackoverflow.com/questions/1651938

Domanda

Eccone uno difficile:

Devo essere in grado di trovare la posizione e le dimensioni di una parola (la sua cornice) sullo schermo (la sua prima occorrenza è sufficiente, da lì dovrei essere in grado di ottenere le successive).

Ad esempio, vorrei essere in grado di rilevare le posizioni delle parole in (ma non limitato a) Word, Excel e PowerPoint per Mac, così come Safari e altri.

La soluzione dovrebbe essere il più veloce possibile; Dovrei essere in grado di trovare almeno 5-6 parole al secondo e utilizzare il minor tempo possibile della CPU.

Ecco cosa ho pensato finora:

  • OCR nel contesto di screenshot / grafica di una finestra (qualche buon framework Open Source che funziona su Mac OS X 10.4 e che può essere utilizzato in un prodotto commerciale?). Evernote è molto bravo a individuare le parole nelle immagini. Non so se utilizza un motore interno personalizzato o un motore Open Source / commerciale, ma sarebbe il tipo di motore che vorrei utilizzare se questo è un "valido" soluzione. Idealmente, rilevo il frame della parola nella finestra dell'applicazione attiva (come ottenere il frame di un'altra applicazione?).
  • Ottenere una sorta di "gancio" sul disegno al quarzo del testo e sull'intercettazione della posizione della parola quando viene disegnata (non sembra molto fattibile a prima vista!).
  • AppleScript, ma dipende molto da quale API offre l'applicazione (non credo che tu possa ottenere le coordinate di una parola in un documento Word da quello che ho visto) ed è lento .
  • ... fuori di idee ...

Il mio obiettivo è quello di ottenere tutti i frame delle parole in un paragrafo nell'ordine giusto in base a una stringa contenente il testo del paragrafo.

Grazie in anticipo per eventuali suggerimenti!

È stato utile?

Soluzione

Come punto di partenza, potresti dare un'occhiata a Codice QuickCursor . Recupera il testo da molte applicazioni diverse tramite API di accessibilità AX . Ora, non afferrerà il posizionamento dei pixel della parola, ma almeno restituirà la NSString associata al testo in quell'elemento dell'interfaccia utente. Ovviamente questo significa che l'app in questione deve supportare queste API; Non so se la suite MS Office lo farebbe. Inoltre, supporta solo elementi modificabili, quindi una pagina Web non modificabile in Safari non funzionerà neanche. Ma potrebbe darti un punto di partenza per alcune idee.

Dai un'occhiata al QCUIElement. {m, h} , quindi all'implementazione in QCAppDelegate.m ( beginQuickCursorEdit: ) ... l'implementazione del suo QCUIElement astratto sembra essere semplice come:

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

Modifica : Aha! Consulta il codice di esempio Inspector Accessibility: UIElementInspector . Può effettivamente ottenere AXPosition degli elementi in una pagina. Ora, non è parola per parola, ma ci stiamo avvicinando. Ti dirà il posizionamento x, y di un blocco di testo, nonché le parole contenute nel blocco di testo.

Altri suggerimenti

Questo è possibile, ma è molto difficile iniziare a lavorare in modo affidabile. Puoi giocare con Spell Catcher's Direct Connect per vedere un esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top