Encontrar el marco de una palabra (posición y tamaño) en la pantalla usando Cocoa o Carbon

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

Pregunta

Aquí hay uno difícil:

Necesito poder encontrar la posición y el tamaño de una palabra (su marco) en la pantalla (su primera aparición es suficiente, desde allí debería poder obtener las siguientes).

Por ejemplo, me gustaría poder detectar posiciones de palabras en (pero no limitado a) Word, Excel y PowerPoint para Mac, así como Safari y otros.

La solución debe ser lo más rápida posible; Debería poder encontrar al menos 5-6 palabras por segundo y usar el menor tiempo de CPU posible.

Esto es lo que pensaba hasta ahora:

  • OCR en el contexto de captura de pantalla / gráficos de una ventana (¿algún buen marco de código abierto que funcione en Mac OS X 10.4 y que pueda usarse en un producto comercial?). Evernote es muy bueno para detectar palabras en imágenes. No sé si usa un motor interno personalizado o uno de código abierto / comercial, pero ese sería el tipo de motor que me gustaría usar si este es un "válido". solución. Idealmente, detectaría el marco de la palabra en la ventana de la aplicación activa (¿cómo obtener el marco de otra aplicación?).
  • Obtener algún tipo de "gancho" en el dibujo de cuarzo del texto e interceptar la ubicación de la palabra cuando se dibuja (¡no parece muy factible a primera vista!).
  • AppleScript, pero depende mucho de qué API ofrece la aplicación (no creo que pueda obtener las coordenadas de una palabra en un documento de Word de lo que he visto) y es lento .
  • ... sin ideas ...

Mi objetivo es obtener todos los marcos de la palabra en un párrafo en el orden correcto basado en una cadena que contiene el texto del párrafo.

¡Gracias de antemano por cualquier pista!

¿Fue útil?

Solución

Como punto de partida, puede echar un vistazo al código QuickCursor . Recupera texto de muchas aplicaciones diferentes a través de API de accesibilidad de AX . Ahora, no tomará la colocación de píxeles de la palabra, pero al menos devolverá el NSString asociado con el texto en ese elemento de la interfaz de usuario. Por supuesto, esto significa que la aplicación en cuestión debe admitir estas API; No sé si la suite de MS Office lo haría. Además, solo admite elementos editables, por lo que una página web no editable en Safari tampoco funcionará. Pero puede darle un punto de partida para algunas ideas.

Observe el QCUIElement. {m, h} , y luego la implementación en el QCAppDelegate.m ( beginQuickCursorEdit: ) ... la implementación de su QCUIElement abstracto parece ser tan simple como:

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

Editar : ¡Ajá! Consulte el código de muestra del Inspector de accesibilidad: UIElementInspector . En realidad, puede obtener la AXPosition de elementos en una página. Ahora, no es palabra por palabra, pero nos estamos acercando. Le indicará la ubicación x, y de un bloque de texto, así como las palabras contenidas en el bloque de texto.

Otros consejos

Esto es posible, pero es muy difícil trabajar de manera confiable. Puedes jugar con Spell Catcher's Direct Connect función para ver un ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top