2017-09-03 2 views
0

Existe-t-il un moyen de détecter les zones de saisie telles que les zones de texte et les cases à cocher dans une application? Je veux marquer chaque zone d'entrée avec un numéro afin que je puisse passer d'un champ d'entrée à l'autre en utilisant mon clavier. Par exemple: Une fois que le script est activé et que la fenêtre active est Google Chrome, la barre d'adresse de Google Chrome peut être définie sur # 1. Lorsque j'appuie sur "1", le curseur sera dirigé vers cette zone. Je suis fondamentalement en train d'essayer de créer une solution de contournement pour les applications qui ne sont pas très claviers.Autohotkey - Comment détecter toutes les zones de saisie/cases à cocher dans une application?

Répondre

0

La réponse est oui, si le nombre de cases à cocher et leur position dans l'application est fixe et vous savez sur quelle machine l'automatisation a lieu.

Recherche sur ImageSearch sur la façon de les localiser à partir de captures d'écran.

Si vous connaissez la position X/Y de la case à cocher dans la fenêtre, vous pouvez également utiliser PixelGetColor pour vérifier si une vérification est visible ou non.

Vous devriez également examiner votre application avec le logiciel AutoIt Spy inclus. Ce programme vous montre ce qu'il peut voir dans la fenêtre de l'application.

Pour obtenir votre étiquetage, consultez les commandes Gui. Si vous vous rendez transparent et que vous ne faites pas de focus, vous pouvez écrire des étiquettes au-dessus de l'application.

1

La plupart des applications Windows utilisent des éléments Windows standard. Pour ces ...

https://autohotkey.com/docs/commands/WinGet.htm - avec le paramètre ControlList, obtient une liste de toutes les commandes standard. Pour ceux :

https://autohotkey.com/docs/commands/ControlGet.htm - peut obtenir le type de contrôle et

https://autohotkey.com/docs/commands/ControlGetPos.htm - peut obtenir la position et les dimensions du contrôle.

Certains peuvent également être contrôlés par COM: https://gist.github.com/kheybot/7026077#automation-of-office-applications


programmes de ligne de commande et la console peuvent parfois être communiquées directement avec, en utilisant les flux standards (stdin, stdout, stderr, LPTn, PRN, NUL), ou vous pouvez communiquer avec le terminal qui affiche le programme en utilisant COM ou WSH: https://gist.github.com/kheybot/7026077#interact-with-command-line

Ceci est important pour beaucoup de programmes de saisie de données existants.


Browsers (par exemple Chrome), malheureusement, ne peut pas utiliser ces composants lourds, car il peut y avoir beaucoup trop sur une page, mais il y a d'autres options pour communiquer avec eux, tels que COM, DDE, etc pour communiquer avec les DOM: https://gist.github.com/kheybot/7026077#browser-automation

pour un navigateur web, je serais enclin à opter pour une approche hybride, combinant AHK-gestion des zones d'entrée du navigateur Web (barre d'adresse, etc.) avec un Greasemonkey/Tampermonkey script pour gérer les champs d'entrée dans la page Web elle-même - le Javascript sera mieux en mesure de gérer les zones d'entrée en utilisant le DOM que n'importe quel logiciel de capture d'écran pourrait.Il y a aussi la possibilité d'utiliser une suite de tests fonctionnels comme Selenium pour l'automatisation, et d'utiliser la fonctionnalité de plug-in du navigateur pour écrire une extension pour gérer son interface utilisateur. applications

Cela signifie que vous avez maintenant deux problèmes de programmation, bien sûr ...


Java, les applications Flash, les applications HTML5, certains logiciels de conception graphique, et à peu près tous les jeux informatiques sont essentiellement juste graphiques, sans moyen d'identification externe des contrôles. Pour cela, vous devez utiliser des techniques de base de raclage d'écran: http://www.autohotkey.com/docs/commands/ImageSearch.htm et http://www.autohotkey.com/docs/commands/PixelSearch.htm pour identifier des zones spécifiques, ce qui ne peut être réellement fait qu'en programmant individuellement la commande spécifique. Une option pour la détection générique, cependant, est d'avoir quelque chose qui détecte les ombres (ombres portées, composants de bouton, etc) et vous permet d'intercaler entre et d'envoyer un clic aux composants détectés de cette façon. Malheureusement, le design plat moderne signifiait que cela ne fonctionnerait pas toujours, alors vous pourriez aussi essayer de chercher des rectangles de couleur plate ... sauf parfois, ils ont des coins courbes. Parce que les graphistes détestent les gens. À ce stade, vous verrez que ce que vous avez ici est un labyrinthe infini de complexité fractale.

Vous pouvez créer une solution ControlGet simple qui ne fonctionne pas pour de nombreuses applications que vous utiliseriez régulièrement ... ou vous pouvez créer une approche hybride qui cible de nombreuses applications individuellement, tout en essayant d'avoir une solution générique pour applications non reconnues.

Si vous créez ceci pour votre usage personnel, je dirais que vous devriez essayer de le faire fonctionner avec les applications que vous connaissez et que vous utilisez régulièrement, et cela devrait suffire. Si vous l'écrivez en tant que logiciel d'accessibilité pour les autres utilisateurs, je dirais que vous voulez qu'il soit configurable par l'utilisateur pour chaque application: laissez-les contrôler l'élément d'entrée sur lequel ils veulent cliquer, et dans quel ordre, car l'auto-détection ne fonctionnera jamais parfaitement et ne choisira que rarement la solution idéale.