Page 1 sur 1
[..] Aide pour fixer le MouseMove (Control/Position)
Posté : mar. 21 mai 2013 16:29
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
Re: [..] Aide pour fixer le MouseMove (Control/Position)
Posté : mar. 21 mai 2013 17:59
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])
Re: [..] Aide pour fixer le MouseMove (Control/Position)
Posté : jeu. 23 mai 2013 08:26
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 !!

Re: [..] Aide pour fixer le MouseMove (Control/Position)
Posté : mer. 12 juin 2013 10:43
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 !
Re: [..] Aide pour fixer le MouseMove (Control/Position)
Posté : ven. 14 juin 2013 01:19
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 !!
Re: [..] Aide pour fixer le MouseMove (Control/Position)
Posté : ven. 14 juin 2013 09:48
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
Code : Tout sélectionner
#Include <Array.au3>
#include <WinAPI.au3>
$title = "Titre de la fenetre IE"
$list = _getControlsList( WinGetHandle($title) ) ; On récupère les controles
If $list = 0 Then Exit MsgBox(0, "Liste des contrôles" , "Aucun contrôle pour la fenêtre ")
_ArrayDisplay($list, "Liste des contrôles pour " & $title, -1, 0, "", "", "ROWID|Controle|Largeur|Hauteur")
Func _getControlsList($hWND)
Local $sClassList = WinGetClassList($hWND, "")
Local $split = StringSplit($sClassList, @LF)
Local $controls[1][3]
Local $n = 0
Local $lastCtrl
Local $pos
_ArrayDelete($split, $split[0])
$split[0] = UBound($split) - 1
_ArraySort($split)
If $split[0] = 0 Then Return 0
For $i = 1 To $split[0]
If $split[$i] = "Internet Explorer_Server" Then
If $split[$i] <> $lastCtrl Then
$hInstance = 1 ; Première instance pour cette classe
$lastCtrl = $split[$i]
Else
$hInstance += 1 ; Instance suivante pour cette classe
EndIf
$n += 1
Redim $controls[$n][3]
$controls[$n - 1][0] = "[CLASS:" & $split[$i] & "; INSTANCE:" & $hInstance & "]"
$pos = ControlGetPos($hWND, "", ControlGetHandle($hWND, "", $controls[$n - 1][0]) )
$controls[$n - 1][1] = $pos[2]
$controls[$n - 1][2] = $pos[3]
EndIf
Next
Return $controls
EndFunc
Re: [..] Aide pour fixer le MouseMove (Control/Position)
Posté : ven. 14 juin 2013 21:53
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 ?
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

Re: [..] Aide pour fixer le MouseMove (Control/Position)
Posté : ven. 14 juin 2013 22:33
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 ?
Re: [..] Aide pour fixer le MouseMove (Control/Position)
Posté : ven. 14 juin 2013 22:45
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
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
Local $oIE = _IECreateEmbedded()
Local $gui = GUICreate("Mon Browser", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP)
GUICtrlCreateObj($oIE, 0, 0, @DesktopWidth, @DesktopHeight)
GUISetState()
_IENavigate($oIE, "http://autoitscript.fr/forum/")
Local $pos = ControlGetPos($gui, "", "[CLASSNN:Internet Explorer_Server1]")
MsgBox(0, "Position de Internet Explorer_Server1", "X=" & $pos[0] & @LF & "Y=" & $pos[1] )
While 1
Local $msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then Exit
WEnd
Re: [..] Aide pour fixer le MouseMove (Control/Position)
Posté : mer. 19 juin 2013 23:04
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:)