[R] Fenêtre active

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

[R] Fenêtre active

#1

Message par cutprod »

Bonjour, a tous.
Avec l'aide du forum et pour m'entrainer je me suis reconstituer un petit script qui affiche le titre de la fenêtre active dans un ToolTip situé sur la barre de tache.

Voila mon script =
► Afficher le texte
Jusque ici tout va bien, mais comme j'aime comprendre ce que je fais, est-ce que quelqu'un pourrait m'expliquer "en francais dan le texte" ces deux lignes =

Code : Tout sélectionner

If $fenetre[$i][0] <> "" AND BitAnd(WinGetState($fenetre[$i][1]), 2) _
          And BitAnd(WinGetState($fenetre[$i][1]), 8) Then $titre_f = $fenetre[$i][0]
Le if $fenetre[$i][0] <> "" ok mais c'est avec la suite que j'ai du mal!!

PS= J'ai utiliser l'aide avec les commandes mais j'ai encore du mal!
PS-PS Faites pas gaffe au _IsPressed qui ne prend pas toutes les touches, c'est juste pour tester en gros...
Modifié en dernier par cutprod le ven. 12 nov. 2010 13:31, modifié 1 fois.
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Fenêtre active

#2

Message par timmalos »

Bon on va faire un petit cours de binaire:
La fonction wingetstate ne retourne pas l'etat de la fenêtre, mais LES différents états:
1 = Window exists
2 = Window is visible
4 = Window is enabled
8 = Window is active
16 = Window is minimized
32 = Window is maximized
Une fenêtre peut exister, être 'active' et 'Enabled' en même temps, alors WinGetStage vous renverra simplement 1+2+8=11
Mais vous, vous souhaitez simplement savoir si votre fenetre est active, le reste vous en avez, excusez moi l'expression, rien à faire.
Et là vient la magie des nombres, pourquoi diable utiliser 1, 2, 3, 8, 16, 32 et pas 1 2 3 4 5 6 ???
Mode binaire est la réponse:
Pour faire simple, voilà la correspondance des nombres suivants en binaire:
1 : 00000001
2: 00000010
4: 00000100
8: 00001000
16: 00010000
32: 00100000
Vous commencez a comprendre? Que se passe t'il quand on additionne les différents états cités au dessus? On Obtient 11, mais 11 peut être obtenu uniquement avec un 1+2+8, impossible de faire autrement, donc il est facile, avec n'importe quel numéro obtenu, de savoir exactement quel état est ON et quel état est OFF. En binaire, cela se remarque encore plus vite, car 11: 00001011
Donc, on a bien l'etat 1, l'etat 2, et l'etat 8 actif, comme précisé plus haut.

Maintenant, que fait BitAND? Il opére l'opération AND sur 2 Octets (=8Bits) , la table de vérité d'un AND est la suivante:
Etat 1---Etat 2---Réponse
0---0---0
0---1---0
1---0---0
1---1---1
Il faut que les 2 bits soient à 1 pour que AND réponde 1.
Donc si vous avez suivit, vous faites un BitAnd de la réponse de WingetStat avec 2
Soit:
00001011
AND
00000010
=
00000010
Donc la condition est TRUE. Alors que si votre fenêtre n'est pas visible, alors on va avoir 00000000 soit 0 Soit FALSE, et donc cela siginifie que la fenêtre n'est pas visible, même si à coté elle contient d'autres stats. On dit qu'on applique un MASQUE pour obtenir uniquement l'information souhaitée.

Et donc si vous m'avez suivi, vous vous apercevrez que votre

Code : Tout sélectionner

AND BitAnd(WinGetState($fenetre[$i][1]), 2) _
          And BitAnd(WinGetState($fenetre[$i][1]), 8)
Peut aisément être remplacé par:

Code : Tout sélectionner

AND BitAnd(WinGetState($fenetre[$i][1]), 8+2))
On demande alors a la fenêtre d'être au minimum Active et Visible, sans se préoccuper de savoir si elle est maximisée ou autre.
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Fenêtre active

#3

Message par cutprod »

A ouai ok :o
j'y vois beaucoup plus claire!
Merci pour cette petite leçon de "Binaire", je n'avais pas du tout assimiler "WinGetState",
maintenant c'est fait!!
Merci beaucoup.
Cut, srcipteur du dimanche...désolé !-)
Répondre