[..] Aide pour fixer le MouseMove (Control/Position)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Izarra4autoit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mar. 21 mai 2013 16:08
Status : Hors ligne

[..] Aide pour fixer le MouseMove (Control/Position)

#1

Message par Izarra4autoit »

Bonjour,

Après de longues recherches dans ce forum, je n'arrive toujours pas à m'en sortir !
je crois sincèrement que la solution sera très simple, mais je sèche après plus de 3 semaines de diverses manipulations
Alors je demandes de l'aide!
Merci infiniment!

Alors voilà
j'ai développé un script utilisant IE.au3 : ce script fonctionne très bien tant que je reste sur ce PC et que je ne modifies pas les barres d'adresses ...
je charge une fenetre IE avec le bon contenu, puis je dois cliquer à une position très précise (lien java) de la page IE pour lancer d'autres routines.
Le seul moyen que j'ai trouvé pour parvenir à cette première étape, c'est d'utiliser la fenêtre Windows AutoIt V3 WindowInfo qui me donne bien les éléments ci dessous, dont la valeur qui m'intéresse : Position
(dans l'ex ci dessous on a Position=0,67)
Je range cette valeur 67 dans une variable et je m'en sers dans mon script général pour exécuter des commandes
MouseClick("left",$xPos,$yPos+$PositionInitiale)
ca marche bien, mais si je rajoute une toolbar, ou bien une barre d'options ou encore la barre Google à mon navigateur IE, alors le mousemove ne marche plus, et je dois relire la position relative du champ POSITION dans la fenetre ci--dessous
et ca remarchera jusqu'à nouvelle modification
ce que je souhaiterais faire, c'est récupérer cette valeur Position de la fenetre CONTROL pour l'affecter dynamiquement dans mon script. Comme cela, quelle que soit la configuration sur laquelle je serai, et quelle que soit la config du IE avec ou sans toolbars, le mousemove s'effectuera bioen là ou je le souhaite.*

>>>> Control <<<<
Class: Internet Explorer_Server
Instance: 1
ClassnameNN: Internet Explorer_Server1
Name:
Advanced (Class): [CLASS:Internet Explorer_Server; INSTANCE:1]
ID:
Text:
Position: 0, 67
Size: 1366, 639
ControlClick Coords: 561, 259
Style: 0x56000000
ExStyle: 0x00000000
Handle: 0x002402EC
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Aide pour fixer le MouseMove (Control/Position)

#2

Message par jguinch »

Salut.
Tu peux essayer ça :

Code : Tout sélectionner

$title = "Nom de la fenetre"
$pos = ControlGetPos($title, "", "[CLASSNN:Internet Explorer_Server1]")
MsgBox(0, "position", "X = " & $pos[0] & @LF & "Y = " & $pos[1])
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Izarra4autoit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mar. 21 mai 2013 16:08
Status : Hors ligne

Re: [..] Aide pour fixer le MouseMove (Control/Position)

#3

Message par Izarra4autoit »

Merci Jguinchard !
C'est exactement ça que je cherchais
pour une raison que j'ignore, ma fenetre IE (lancée via IE.au3 et _ieload) s'affiche en fait en Instance 2 !
j'ai du adapter ton code en mettant soit 1 soit 2

du coup je me suis dit que je mettrai bien un test supplémentaire?
tester le numero de l'instance de la fenetre IE ouverte
afin de pouvoir exécuter la commande:
$pos = ControlGetPos($title, "", "[CLASSNN:Internet Explorer_Server1]")
ou bien
$pos = ControlGetPos($title, "", "[CLASSNN:Internet Explorer_Server2]")

As tu déjà fais ce genre de truc !
MErci encore !! :)
Izarra4autoit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mar. 21 mai 2013 16:08
Status : Hors ligne

Re: [..] Aide pour fixer le MouseMove (Control/Position)

#4

Message par Izarra4autoit »

Comme j'ai maintenant le problème de ne pas savoir si la fenetre que je cherche est en INSTANCE 1 ou 2
J'ai essayé plusieurs manips et plutot que d'utiliser pour $title="mafenetre web..."
la fonction:
$pos = ControlGetPos($title, "", "[CLASSNN:Internet Explorer_Server1]")
j'utilise plutot:
$pos = ControlGetPos($title, "", "[CLASS:Internet Explorer_Server]")

par contre, en faisant comme ça, de temps en temps, le script me renvoie une erreur comme s'il ne trouvait pas la fenetre
alors, j'ai mis un timer : sleep(1000) avant le controlgetpos

Pensez vous que c'est propre ?

merki !
Izarra4autoit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mar. 21 mai 2013 16:08
Status : Hors ligne

Re: [..] Aide pour fixer le MouseMove (Control/Position)

#5

Message par Izarra4autoit »

Après vérifications, et sur 3 pc différents qui ont chacun leur propres barre d'outils et barre de recherche, linstance de ma fenetre peut varier de 1 à 3
comment faire pour executer le bon ControlGetPos ?
la réponse de Jguinchard m'a beaucoup aidé à y voir plus clair
Du coup, je fais des mouseclick("left",$xpos,$ypos+$POS)
$xpos,$ypos sont mes coordonnées dans ma fenetre principale et $pos le décalage à utiliser !

sur mon PC 1,
ça marche avec $pos = ControlGetPos($title, "", "[CLASSNN:Internet Explorer_Server1]")
par contre sur mon PC2,
ça marche avec $pos = ControlGetPos($title, "", "[CLASSNN:Internet Explorer_Server2]")
et pour le PC 3
ça marche avec $pos = ControlGetPos($title, "", "[CLASSNN:Internet Explorer_Server3]")

j'ai bien essayé de faire comme ça
avec $pos = ControlGetPos($title, "", "[CLASS:Internet Explorer_Server]")
mais la il me donne la position de la Googlebar et non pas de ma fenetre principale !
du coup, mes mouseclick ne marchent pas à coup sur
je voudrais faire une sorte de script universel qui marche quelle que soit le pc et surtout, quels que soient le nombre de toolbars installé !
Merci d'avance !!
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Aide pour fixer le MouseMove (Control/Position)

#6

Message par jguinch »

Pour trouver la bonne instance, je pense qu'il faut commencer par récupérer la liste de toutes les instances de type "Internet Explorer_Server".
Ensuite, à partir de cette liste, on peut essayer de trouver laquelle est la bonne, peut-être en fonction de sa taille ? J'imagine que l'instance qui la plus grande taille est la bonne...

Voilà un petit bout de script qui pourra peut-être t'aider :
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Izarra4autoit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mar. 21 mai 2013 16:08
Status : Hors ligne

Re: [..] Aide pour fixer le MouseMove (Control/Position)

#7

Message par Izarra4autoit »

Merci Jguinch !

je vais regarder ça de plus près et je suis sûr que ça va marcher :)
Mais d'un autre côté, je me demande si j'ai bien posé la question en fait ? :oops:
En effet, je ne pensais pas que cela soit si compliqué !
alors j'essayes de reposer la question différement
a noter que la page dans laquelle je dois exécuter ce script est en Java ou équivalent, et ne permet pas d'envoyer de CtrlSend ou de capturer des mots (get control text)
Donc, j'ai fait un script tout simple qui doit aller cliquer sur un emplacement bien précis de ma fenetre IE
un mouseclick tout bete en position ($x,$y+$POS) que j'ai capturé via Autoit window info (avec un control POS)
tant que j'exécute ce script sur mon PC maitre, il marche bien à chaque fois
mais si je rajoute une barre d'outils, ou si je cache la barre de menus, forcément le script ne marche plus, vu que la fenetre principale de IE a grandi ou diminué !
Sur ce même PC, si je gère le ControlGetPos, je vais m'en sortir et ça marche pas mal
par contre, si je tente d'exécuter ce script sur un autre PC, avec une version d'IE différente, et/ou avec des barres d'outils différents, la ça se complique car je peux récupérer un numéro d'instance différent !
Voulant faire un script 'universel', j'ai bataillé bien depuis un mois avec les controlgetpos et les instance, mais c'est tellement galère que je suis en train de me dire : pourquoi ranger dans un fichier INI ou TXT la valeur du CtrlGetPos du poste en cours, quitte à le modifier dès que la config IE evolue.

Si personne n'a d'idées de génie la dessus, j'irai pleurer 10mn dans le couloir mais je reviendrai très vite fermer le POST [R] ! Mais je remercie vivement tous ceux qui m'ont déjà répondu !!
CG :)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Aide pour fixer le MouseMove (Control/Position)

#8

Message par mikell »

Tu peux pas utiliser les fonctions IE ?
Ce lien sur lequel tu dois cliquer, il a pas une identité dans le code source de la page ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Aide pour fixer le MouseMove (Control/Position)

#9

Message par jguinch »

Mikell a raison, mais si c'est vraiment du Java (non pas Javascript), c'est vrai que c'est pas évident.
Sinon, l'idée pour que l'instance Internet Explorer_Server soit toujours la 1, ce serait de créer une GUI avec ton browser embarqué, comme ça plus de barres d'outils...
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Izarra4autoit
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mar. 21 mai 2013 16:08
Status : Hors ligne

Re: [..] Aide pour fixer le MouseMove (Control/Position)

#10

Message par Izarra4autoit »

Bonsoir,

merci à vous deux!
effectivement, c'est du pur Java
et c'est vraiment pas évident
je vais regarder le dernier script pour voir comment je pourrai embarquer tout sans barre de taches
et d'ici qq jours, en fonction de mes réponses, je fermerai le post

merci encore
cg:)
Répondre