mai
2009
AutoHotkey est un logiciel gratuit qui me permet quotidiennement de simplifier certaines tâches répétitives. Par exemple saisir les dates dans notre format normalisé, taper les formules de politesse dans les mails, taper plus vite les expressions courantes lors des traductions, écrire des macros pour répéter un test de logiciel des milliers de fois, insérer des bouts de code pendant la programmation, insérer certains commentaires pour respecter nos normes de codage… Bref, une sorte de couteau suisse. Evidemment il y a des outils spécialisés pour tout ca : dans Office on peut écrire des macros, dans les environnements de programmation aussi, etc. Mais comme j’utilise beaucoup de logiciels, je ne maîtrise pas forcément les particularités de chacun, et un couteau suisse est bien utile dans mon cas.
Dans AutoHotkey on réalise tout cela grâce à des fichiers de script que l’on exécute soit en permanence, soit ponctuellement. Un fichier de script peut également être compilé en un exécutable Windows que l’on peut faire tourner sur n’importe quel PC, même si AutoHotkey n’est pas installé. Bon j’en ai déjà marre d’écrire AutoHotkey sans arrêt, avec les majuscules bien placées, alors je vais automatiser ca ! J’édite le script principal, via la barre d’icônes, cela lance Notepad (il y a des modes AutoHotkey disponibles dans des éditeurs plus avancés), et il me suffit d’insérer la ligne :
::ah::AutoHotkey
pour que maintenant dans n’importe quelle application Windows, le fait de taper ah insère automatiquement AutoHotkey. Quand je travaillais sur la traduction de Scrum et XP depuis les tranchées, j’avais défini des abréviations comme :
::sp::sprint ::cad::c’est-à-dire ::éq::équipe ::mb::membre de l’équipe ::mbs::membres de l’équipe ::ped::programmation en duo ::pta::phase de tests d'acceptation
Ce qui peut être intéressant c’est de limiter le comportement de remplacement à une fenêtre particulière, au cas où le comportement global soit indésirable (je peux souhaiter continuer à taper ah dans des mails par exemple). C’est possible comme ceci :
#IfWinActive, Windows Live Writer ::ah::AutoHotkey #IfWinActive
La directive #IfWinActive permet de filtrer sur le titre de la fenêtre, et donc de limiter le comportement à Windows Live Writer que j’utilise pour rédiger ce billet.
Pour accélérer la rédaction des mails, j’utilise diverses abréviations comme :
::bst:: SendInput Best regards{Enter}Bruno Statistics("bst") return
::hic:: SendInput Hi Charles,{Enter} Statistics("hic") return
Ces exemples montrent qu’on peut associer plusieurs lignes de code à une abréviation, lui faire taper des touches particulières avec la syntaxe {Enter}, et même appeler des fonctions comme Statistics, que j’ai programmée pour tracer dans un fichier mon utilisation de ces abréviations :
Statistics(id) { FormatTime, vdate, ddMMyyyy FileAppend,%vdate% | %id% `n , F:\hotkeys.txt }
Mon fichier de stats indique que j’ai utilisé 3000 fois ces abréviations en deux ans.
Voici une autre des mes fonctions qui retourne une date dans le format normalisé 15 MAY 2009 défini par notre système qualité (format non ambigu pour tous nos collègues qu’ils soient français, américains, anglais etc.) :
DateNormalisee() { AbbrevMonths:="JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC" FormatTime, CurrentMonth,,M ; StringMid, OutputMonth, AbbrevMonths, (CurrentMonth-1)*4+1, 3 FormatTime, OutputDay,, dd FormatTime, OutputYear,, yyyy OutputDate:=OutputDay . " " . OutputMonth . " " . OutputYear return OutputDate }
Il me suffit alors d’associer cette fonction à la touche de mon choix.
L’exemple ci-dessous montre comment chercher dans google n’importe quelle chaîne sélectionnée dans n’importe quelle application (la boîte de dialogue étant pré-remplie avec le contenu du presse-papier Windows grâce à la variable Clipboard) :
DemandeAGoogle() { InputBox, ToSearch, Enter your google search,,,,90,,,,,%Clipboard% if ErrorLevel != 1 { GoogleRequest:="http://www.google.fr/search?hl=fr&q=" . ToSearch Run %GoogleRequest% } }
^!g:: DemandeAGoogle() Statistics("^!g google") return
Je ne suis jamais allé plus loin que l’utilisation de la fonction InputBox, mais on peut aussi réaliser des interfaces graphiques complètes avec AutoHotkey !
Enfin, mon autre grande utilisation de AutoHotkey est la réalisation de macros pour tester des logiciels de manière répétitive, typiquement pour arriver à reproduire des bugs à faible fréquence d’apparition mais néanmoins très problématiques pour des clients. AutoHotkey est très pratique car il contient un utilitaire d’enregistrement de macros (AutoScriptWriter.exe) qui capture tout ce que l’on fait avec la souris et le clavier, et donc génère une bonne partie du code de test pour nous. Voici par exemple ce que ca donne quand j’enregistre une séquence du type cliquer dans Windows Live Writer, cliquer sur « Insert Hyperlink », taper une URL dans la boîte de dialogue qui apparaît, et cliquer sur le bouton Cancel :
WinWait, Untitled - Windows Live Writer, IfWinNotActive, Untitled - Windows Live Writer, , WinActivate, Untitled - Windows Live Writer, WinWaitActive, Untitled - Windows Live Writer, MouseClick, left, 517, 4 Sleep, 100 MouseClick, left, 1150, 481 Sleep, 100 WinWait, Insert Hyperlink, IfWinNotActive, Insert Hyperlink, , WinActivate, Insert Hyperlink, WinWaitActive, Insert Hyperlink, Send, http:{SHIFTDOWN}//{SHIFTUP}ceci{SHIFTDOWN}.{SHIFTUP}est{SHIFTDOWN}.{SHIFTUP}test{SHIFTDOWN}.{SHIFTUP}fr MouseClick, left, 388, 84 Sleep, 100
Ce code peut alors être inséré dans n’importe quel script. Typiquement j’utilise une boucle infinie du type suivant :
Loop { IfWinExist, Windows Task Manager { ;ne rien faire si le task manager est affiché, ;afin d'éviter la perte de contrôle du PC en cas d'erreur dans le script Continue }
; insérer ici le code généré par AutoScriptWriter
; .......................... }
Bien sûr ce genre de code est assez fragile, car il dépend de la position des boutons. Je me limite en général à des scripts de quelques dizaines de lignes. Mais ils rendent déjà de nombreux services.
Ma seule critique sur AutoHotkey est qu’il utilise un langage de programmation ad-hoc, hyper-spécialisé, avec une sémantique pas toujours très claire, ce qui fait un peu grincer des dents les gens comme moi qui apprécient les langages bien définis. Il faut souvent se référer à la documentation, qui par contre est complète et bien faite, avec beaucoup d’exemples. Il y a également une communauté très active qui fournit des scripts tout prêts pour diverses tâches, et on peut obtenir de l’aide dans des forums. Alors malgré ce langage de programmation un peu particulier je vous invite à essayer AutoHotkey !
Commentaires récents
- Des tableaux pour l’intégration d’un équipier dans une équipe Scrum dans
- Rétrospectives, la directive première dans
- Des tableaux pour l’intégration d’un équipier dans une équipe Scrum dans
- Des tableaux pour l’intégration d’un équipier dans une équipe Scrum dans
- Des tableaux pour l’intégration d’un équipier dans une équipe Scrum dans