[R] Deux fenêtres qui portent le même nom...

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JOols
Niveau 2
Niveau 2
Messages : 18
Enregistré le : dim. 08 mars 2009 12:04
Status : Hors ligne

[R] Deux fenêtres qui portent le même nom...

#1

Message par JOols »

Bonsoir... voila mon souci, et oui encore et toujours des soucis... Grâce à WinActivate, ControlSend,... on peut, en ayant les infos de chaque fenêtre choisir dans quelle fenêtre ou control intervenir... comment faire alors si les fenêtres portent le même nom (par ex: "Bloc note- Sans Titre") ? :? une solution pour qu'elle soient distinctes?
Merci d'avance...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11816
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Deux fenêtres qui portent le même nom...

#2

Message par Tlem »

Le seul élément qui pourrait vous permettre de différencier deux fenêtres identiques, c'est le handle de celles-ci.

Si ce sont des applications que votre script lance, pas de problème. Sinon vous devrez rechercher les fenêtres de même nom et récupérer leur handle.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
JOols
Niveau 2
Niveau 2
Messages : 18
Enregistré le : dim. 08 mars 2009 12:04
Status : Hors ligne

Re: [..] Deux fenêtres qui portent le même nom...

#3

Message par JOols »

handle? Ce même handle qu'affiche Au3info? si je ne m'abuse c'est la plage mémoire ou est située la fenêtre c'est ça? Donc de toute manière à chaque session, la réecriture ou du moins le changement du script sera nécessaire...? enfin bref, et si j'ai donc les handles des deux fenetres... ou utiliser ces handles, y a t'il une commande spécifique? car à part
WinGetHandle, je ne vois pas de fonctions qui s'y réfère... :?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11816
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Deux fenêtres qui portent le même nom...

#4

Message par Tlem »

Utilisez la commande WinList().
Comme cela vous aurez le titre des fenêtres et leur handle.
Une simple recherche du nom de la fenêtre dans le tableau vous amènera vers le handle. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
JOols
Niveau 2
Niveau 2
Messages : 18
Enregistré le : dim. 08 mars 2009 12:04
Status : Hors ligne

Re: [..] Deux fenêtres qui portent le même nom...

#5

Message par JOols »

Code : Tout sélectionner

$var = WinList()

For $i = 1 to $var[0][0]
  ; Only display visble windows that have a title
  If $var[$i][0] <> "" AND IsVisible($var[$i][1]) Then
    MsgBox(0, "Details", "Title=" & $var[$i][0] & @LF & "Handle=" & $var[$i][1])
  EndIf
Next

Func IsVisible($handle)
  If BitAnd( WinGetState($handle), 2 ) Then
    Return 1
  Else
    Return 0
  EndIf

EndFunc
Trés bien... Ca me donne effectivement un tableau avec les fenêtres (d'ailleurs même des fenêtres qui n'apparaissent pas comme Control Mager ???) A présent par rapport à mon ControlSend, ou dois je faire intervenir ces handle si ce n'est pas trop demander Tlem... car mon controsend découlerait ainsi :

Code : Tout sélectionner

ControlSend("nom de la fenêtre(obsolèthe puisque les deux ou plus ont le même nom)", "class ID", "")


:?

Je suis un peu perdu... je suis désolé d'être casse c... mais je débute et je crois que je me suis pas attaqué au plus simle :D
JOols
Niveau 2
Niveau 2
Messages : 18
Enregistré le : dim. 08 mars 2009 12:04
Status : Hors ligne

Re: [..] Deux fenêtres qui portent le même nom...

#6

Message par JOols »

Résumons (je sens que je vais y passer la nuit mais bon) :

J'ai deux fenêtres qui portent le même nom : "Sans titre - Bloc-notes"
Grâce à Au3info ou à la WinList, j'obtiens les handle des deux fenêtres:
0x004904BA et 0x004904BA (Seule chose qui puissent les différencier)

Je sais à présent qu'un ControlSend ne sera utile que si j'arrive à faire entrer dans mon script la $var handle dans le genre :

if $handle = 0x0049... then
ControlSend ("Sans titre... ... ..."coucou")

Mais bon je sêche, si tu peux m'aider un peu plus Tlem, je t'en serais reconnaissant :wink: ...
Autre chose, tu dis :

"Si ce sont des applications que votre script lance, pas de problème."

Dans quelle mesure? parceque ce serait des handle prédéfinis?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11816
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Deux fenêtres qui portent le même nom...

#7

Message par Tlem »

Pour répondre à votre première question, utilisez tout simplement le handle de la fenêtre au lieu du titre dans la commande ControlSend.

Code : Tout sélectionner

If $handle = 0x0049... Then
ControlSend (0x0049, "", "" , "coucou")
Si vous regardez l'aide associé à la commande, sur le lien Controls de la description de controlID, vous pouvez lire qu'il est possible d'utiliser le commutateur INSTANCE ce qui vous permettrait de gérer la première ou la seconde instance de votre bloc note.

Code : Tout sélectionner

ControlSend("Bloc note- Sans Titre", "", "[CLASS:Edit; INSTANCE:1]", "coucou")
Allez jeter un oeil ici (et particulièrement en bas): http://www.autoitscript.fr/autoit3/docs ... vanced.htm

Pour répondre à votre deuxième question, le handle est un numéro donné par le système (Windows dans votre cas) et qui change généralement à chaque création d'une fenêtre (tout comme le ControlID). Vous ne pouvez donc être certain que le handle attribué soit le même la fois suivante.
Par contre, si votre script lance la création de la fenêtre, alors vous pouvez récupérer ce numéro et donc la contrôler.
La commande Run par exemple peut vous aider en ce sens.

Code : Tout sélectionner

$HandleNotePad = Run("Notepad.exe", "", @SW_MAXIMIZE)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre