Recherche du cadre (position et taille) d'un mot à l'écran à l'aide de cacao ou de carbone

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

Question

Voici un problème difficile:

Je dois pouvoir trouver la position et la taille d'un mot (son cadre) sur l'écran (sa première occurrence suffit, à partir de là, je devrais pouvoir obtenir les suivants).

Par exemple, j'aimerais pouvoir détecter les positions des mots dans Word, Excel et PowerPoint pour Mac, mais également dans Safari et autres.

La solution doit être aussi rapide que possible. Je devrais être capable de trouver au moins 5 à 6 mots par seconde et d’utiliser le moins de temps possible sur votre ordinateur.

Voici ce à quoi je pensais jusqu'à présent:

  • OCR dans la capture d'écran / le contexte graphique d'une fenêtre (tout bon framework Open Source fonctionnant sous Mac OS X 10.4 et utilisable dans un produit commercial?). Evernote sait très bien repérer des mots dans les images. Je ne sais pas s'il utilise un moteur interne personnalisé ou un moteur Open Source / commercial, mais ce serait le type de moteur que je voudrais utiliser s'il s'agit d'un "valide". Solution. Idéalement, je détecterais le cadre du mot dans la fenêtre de l’application active (comment obtenir le cadre d’une autre application?).
  • Récupération d'une sorte de "crochet" sur Quartz dessiner du texte et intercepter la position du mot quand il est tiré (cela ne semble pas très faisable au premier abord!).
  • AppleScript, mais cela dépend beaucoup de l'API proposée par l'application (je ne pense pas que vous puissiez obtenir les coordonnées d'un mot dans un document Word à partir de ce que j'ai vu) et c'est lent .
  • ... à court d'idées ...

Mon objectif est de placer tous les cadres d'un mot dans un paragraphe dans le bon ordre en fonction d'une chaîne contenant le texte du paragraphe.

Merci d'avance pour toute astuce!

Était-ce utile?

La solution

Comme point de départ, vous pouvez jeter un coup d’œil sur Code de QuickCursor . Il extrait le texte de nombreuses applications différentes via le API AX Accessibility . À présent, il ne saisira pas l'emplacement du mot en pixels, mais il renverra au moins la chaîne NSString associée au texte de cet élément d'interface utilisateur. Bien sûr, cela signifie que l'application en question doit prendre en charge ces API; Je ne sais pas si la suite MS Office le ferait. En outre, il ne prend en charge que les éléments modifiables. Par conséquent, une page Web non modifiable dans Safari ne fonctionnera pas non plus. Mais cela peut vous donner un point de départ pour quelques idées.

Examinez le QCUIElement. {m, h} , puis son implémentation dans le QCAppDelegate.m ( beginQuickCursorEdit: ). ... la mise en œuvre de son résumé QCUIElement semble être aussi simple que:

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

Modifier : Aha! Consultez l'exemple de code d'inspecteur d'accessibilité: UIElementInspector . Il peut en fait obtenir l’AXPosition d’éléments sur une page. Maintenant, ce n'est pas mot par mot, mais nous nous rapprochons. Cela vous indiquera le positionnement x, y d'un bloc de texte, ainsi que les mots qu'il contient.

Autres conseils

Cela est possible, mais il est très difficile de travailler de manière fiable. Vous pouvez jouer avec Connexion directe de Spell Catcher . fonctionnalité pour voir un exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top