2010-10-06 27 views
3

Salutations,Faites passer le mot sous le curseur de la souris dans tout le monde de Windows

Un ami et moi discutions de la possibilité d'un nouveau projet: Un programme de traduction qui affiche une traduction chaque fois que vous passez la souris sur un mot dans un contrôle , même statiques, non éditables. Je sais qu'il existe de nombreux plugins de navigateur pour faire ce genre de chose sur les pages Web; nous pensons à la façon dont nous le ferions à l'échelle du système (sous Windows).

Bien sûr, la difficulté principale est de trouver le mot que l'utilisateur survole. Je suis au courant de MSAA et de l'automatisation, mais autant que je sache, ces choses vous permettent seulement d'obtenir le contenu entier d'un contrôle, pas le mot spécifique de la souris.

je suis tombé sur cette application (propriétaire) qui fait à peu près exactement ce que nous voulons faire: http://www.gettranslateit.com/

ils sont en quelque sorte en mesure d'obtenir le mot exact que l'utilisateur est en vol stationnaire au-dessus de presque toutes les applications (Il semble avoir des problèmes dans quelques applications, notamment Windows Explorer). Il attrape même le texte hors des contrôles évidemment faits sur commande, d'une manière ou d'une autre. Au début, je pensais qu'il devait utiliser OCR. Mais même si je rétrécis la police tellement bas que le texte devient un blob complètement illisible, il peut toujours reconnaître les mots parfaitement. (Et pourtant, il ne reconnaît rien si je change la police à Wingdings, mais peut-être que c'est par conception?)

Des idées sur la façon dont il réalise cette tâche apparemment impossible?

EDIT: Il ne fonctionne pas avec Wingdings, mais il fonctionne avec d'autres polices non-sens, donc j'ai confirmé qu'il ne peut pas être OCR.

Répondre

1

Vous pouvez saisir le GDI appelle que le texte de sortie à l'écran, puis la figure sur laquelle le cadre de sélection de mot le curseur tombe.

+0

Ahah! Effectivement, quand je jette un coup d'oeil avec dumpbin (merci Jeff), il semble que c'est exactement ce qu'ils font. –

+1

@Paul: vous souvenez-vous exactement quels appels ont été utilisés? – Claudiu

1

Eh bien, pour les contrôles GDI vous pouvez obtenir la position et la taille de la commande, et vous pouvez généralement obtenir les informations de police. Par exemple, avec static text controls vous utiliseriez WM_GETFONT. Puis une fois que vous avez que vous pouvez obtenir la position de la souris par rapport à la position du contrôle et utiliser l'un des font functions, peut-être quelque chose comme GetTextExtentPoint32 pour comprendre ce qui est sous le curseur. Je suis assez sûr que la réponse réside dans cette direction ...

Vous pouvez exécuter dumpbin /imports sur l'autre application et voir quelles API ils appellent.