Maintenant que nous savons comment lancer Autoit Window Info et comment l'utiliser, je vais vous apprendre à ne regarder que les informations utiles. En effet, si vous êtes curieux, vous avez remarqué que j'ai entouré 2 valeurs dans les images ci-dessus. Vous souhaitez savoir pourquoi ? Pour cela, j'ai besoin de vous en apprendre un peu plus sur les titres de fenêtres, et ça tombe bien, on est là pour ça.
Techniques de base
La première chose à savoir, c'est que la plupart des fenêtres peuvent être
identifiées par leur
titre ou
une combinaison de leur titre et texte.
Les titres de la plupart des fenêtres sont assez évidents, par exemple "Sans titre - Bloc-notes" est le titre de l'éditeur de texte Notepad.exe et dans la plupart des cas cela suffit pour automatiser.
Par défaut, les titres et textes de fenêtres sont sensibles à la casse. Vous devez donc impérativement respecter la casse et la ponctuation. Pour éviter tout problème, sélectionnez le titre ou le texte dans <AutoIt Window Info> et utilisez Ctrl + C pour le copier et ensuite le coller directement dans votre script. Nous allons cependant voir prochainement qu'il est possible de forcer la comparaison en minuscule, pour ne plus se soucier de la casse.
Prenons une fonction simple , la fonction
WinExists :
Code : Autre1
| WinExists ( "title" [, "text"] ) |
Cette fonction va simplement nous dire si la fenêtre en question existe ou non. Attention, une fenêtre peut être minimisée, cachée, déplacée en dehors de l'écran, ne pas être dans votre barre des tâches et exister pour autant.
Le titre est l'unique paramètre obligatoire pour cette fonction, le texte est optionnel. Dans certaines fonctions le paramètre texte n'est pas optionnel, si vous ne souhaitez pas en spécifier, utilisez les guillemets vides "".
Une chaîne vide, ou rien du tout, dans texte signifie pour AutoIt que n'importe quel texte est valide.
Si une chaîne vide "" est fournie pour le titre également, alors c'est la première fenêtre active lors de l'exécution du script qui sera utilisée.
Par exemple, le code suivant nous dira si au moins une fenêtre est active ou non.
Code : Autre1
2
3
| If WinExists("") Then
MsgBox(0, "", "Une fenêtre active existe")
EndIf |
Et si on a plusieurs fenêtres d'une même application ouverte, comment fait-on ?
C'est très simple, on va utiliser le paramètre
texte pour les différencier.
Par exemple, si une fenêtre du Bloc-notes contenait le texte "Voici un peu de texte !" l'outil Window Info indiquerait :
L'outil <AutoIt Window Info> a bien repéré le titre et le texte de la fenêtre du Bloc-notes.
Tout ce que cet outil peut voir, AutoIt peut le voir aussi.
Maintenant, nous avons suffisamment d'informations pour identifier précisément cette fenêtre même si beaucoup d'autres fenêtres Bloc-notes sont ouvertes. Dans ce cas, nous utilisons :
Code : Autre1
| WinExists("Sans titre - Bloc-notes", "Voici un peu de texte!") |
Et voilà, maintenant vous en savez un peu plus sur les titres de fenêtres, mais on va encore compliquer, alors accrochez-vous. Ce qui a été décrit est le mode opératoire par défaut de AutoIt, mais nous allons voir des méthodes avancées lorsque tout n'est plus aussi simple.
Techniques avancées
A la place d'un simple titre, une
description spéciale peux être utilisée comme paramètre pour le titre de la fenêtre.
Cette description peux être utilisée pour identifier la fenêtre par les propriétés suivantes :
- TITLE - Le titre de la fenêtre
- CLASS - Le nom de la classe interne à window (classname)
- REGEXPTITLE -Le titre de la fenêtre en utilisant une expression régulière
- REGEXPCLASS - Classname d'une fenêtre utilisant une expression régulière
- LAST - La dernière fenêtre utilisée dans une commande précédente de AutoIt
- ACTIVE - La fenêtre courante active
- X \ Y \ W \ H - La position et la taille d'une fenêtre
- INSTANCE - La première instance lorsque toutes les propriétés correspondent
Une ou plusieurs propriétés peuvent être utilisées et combinées comme ceci :
Code : Autre1
| [PROPERTY1:Value1; PROPERTY2:Value2] |
Si vous regardez avec <Autoit Window Info> une fenêtre du Bloc-notes, vous pourrez voir que sa classe est "Bloc-notes". On peut donc faire comme suit :
Code : Autre1
| WinExists("[CLASS:Bloc-notes]", "") |
De même, pour vérifier la présence de la deuxième instance d'une fenêtre dont le titre est "Ma fenêtre" et de classname "Ma Class", on ferait :
Code : Autre1
| WinExists("[TITLE:Ma fenêtre; CLASS:Ma Class; INSTANCE:2]", "") |
Les Handles (Hwnd)
Pour terminer, sachez qu'il est également possible de remplacer le titre par le Handle de la fenêtre. Souvenez-vous, le handle d'une fenêtre est une valeur spécifique que Windows attribue a une fenêtre chaque fois qu'elle est créée. Quand vous avez un handle, vous pouvez l'utiliser en lieu et place du paramètre de titre.
L'avantage d'utiliser les handles de fenêtre est que si vous avez plusieurs copies d'une application ouverte (qui ont le même titre/texte) vous pouvez les identifier par leur handle.
Lorsque vous utilisez le handle d'une fenêtre comme paramètre de titre alors le texte est complètement ignoré.
Une multitude de fonctions comme WinActive, WinGetHandle, WinList et GUICreate renvoient ce handle.
Par exemple, pour fermer la fenêtre active :
Code : Autre1
2
| $handle = WinGetHandle("[active]")
WinClose($handle) |