Page 1 sur 1
[..] Problème mouseclick
Posté : dim. 19 juil. 2009 19:39
par baddark
Bonjour,
J'ai un petit problème avec la fonction mouseclick :s, je vous explique
Tout d'abord, ma fonction récupère la position actuel du curseur
Code : Tout sélectionner
Func GetPos() ;récupérer la position du curseur
Local $a
$a = GUIGetCursorInfo()
GUICtrlSetData($x_location, $a[0])
$x_location = $a[0]
GUICtrlSetData($y_location, $a[1])
$y_location = $a[1]
EndFunc
Puis le mouseclick effectue un ou plusieurs clicks à l'endroit indiqué précédemment selon la configuration, j'ai mis un Opt("MouseCoordMode", 2) en début de code afin d'avoir les bon coordonnées sélectionné peut importe la position de la fenêtre, le premier click est au bon endroit mais par contre, les suivant sont décalé d'environ 300 pixel à droite et 20 en bas, pourquoi ce décalage ?
De plus, lorsque mon logiciel n'est pas au premier plan, une erreur dans cette fonction apparait : subscript used with non-Array variable.
Re: [..] Problème mouseclick
Posté : dim. 19 juil. 2009 20:01
par jbnh
Pour l'erreur, c'est normal qu'il y ai une si la fenêtre avec laquelle tu souhaites travailler n'est pas active.
Le bout de code que tu nous a donné semble correct, l'erreur doit donc être autre part.
Dis nous en plus.
Re: [..] Problème mouseclick
Posté : dim. 19 juil. 2009 20:20
par baddark
Effectivement, j'avais oublier l'active window :s
Je ne comprends vraiment pas pourquoi il y a ce décalage, j'ai vérifier avec un msgbox, les cordonnées sont pourtant les memes :s
cela ne peut venir du opt() ? J'ai l'impression que le curseur veux compenser la largeur/hauteur de la fenêtre, si j'active mon mouseclick le curseur se décale vers le bords de l'écran le plus proche :/ c'est a n'y rien comprendre, dois-je envoyé tout mon code ?
Re: [..] Problème mouseclick
Posté : dim. 19 juil. 2009 20:56
par jumby
Bonjour,
Comme il a été dit, le bout de code que tu nous a fourni plus haut semble correct.
Avoir plus de code ne pourrait que nous aider.
En revanche, tu utilises Mousecoordmode 2. Dans la doc, y est écrit :
MouseCoordMode Sets the way coords are used in the mouse functions, either absolute coords or coords relative to the current active window:
0 = relative coords to the active window
1 = absolute screen coordinates (default)
2 = relative coords to the client area of the active window
Personnelement, j'aurais choisi le paramètre 0. Je n'arrive pas bien à saisir la différence (si elle existe) entre le paramètre 0 et 2.
Testes avec le paramètre 0, ça ne mange pas de pain.
Re: [..] Problème mouseclick
Posté : dim. 19 juil. 2009 21:00
par baddark
Et bien en fait je n'y comprend rien non plus, mais j'ai mis 2 car avec les autres, même les clicks simple sont complètement décalé :/
Je pense que le 2 se base par rapport au coin en haut a gauche.
► Afficher le texte
Code : Tout sélectionner
Func GetPos() ;récupérer la position du curseur
Local $a
$a = GUIGetCursorInfo()
GUICtrlSetData($x_location, $a[0])
$x_location = $a[0]
GUICtrlSetData($y_location, $a[1])
$y_location = $a[1]
EndFunc
Func touche_saisi() ; différente vérification et cliquage
$i = 0
GetPos()
While($i < $compteur)
MouseClick($souris, $x_location, $y_location, $click, 50)
Msgbox(0, "", $x_location&" "&$y_location)
$i = $i + 1
Sleep($intervalle)
WEnd
EndFunc
$souris = GuiCtrlRead($list_souris)
$click = GuiCtrlRead($list_simple)
$compteur = GuiCtrlRead($nbr_click)
$tch1 = GuiCtrlRead($autoclick_tch1)
$tch2 = GuiCtrlRead($autoclick_tch2)
$heure = GuiCtrlRead($heure_list)
$min = GuiCtrlRead($min_list)
$sec = GuiCtrlRead($sec_list)
$intervalle = $heure * 3600 + $min * 60 + $sec & "000"
if($souris = "Gauche") Then
$souris = "left"
elseif($souris = "Milieu") Then
$souris = "middle"
elseif($souris = "Droit") Then
$souris = "right"
Endif
if($click = "Simple") Then
$click = 1
elseif($click = "Double") Then
$click = 2
Endif
If($tch1 = "Maj") Then
$tch1 = "+"
ElseIf($tch1 = "Ctrl") Then
$tch1 = "^"
ElseIf($tch1 = "Alt") Then
$tch1 = "!"
ElseIf($tch1 = "Ctrl + Alt") Then
$tch1 = "!^"
EndIf
if($tch1 = "Rien") Then
$touche = "{"&$tch2&"}"
Else
$touche = $tch1 & "{"&$tch2&"}"
EndIf
HotKeySet($touche, "touche_saisi")
Tout ce qui concerne le mouseclick est ici il me semble
Re: [..] Problème mouseclick
Posté : dim. 19 juil. 2009 21:34
par orax
Dans le code
Code : Tout sélectionner
GUICtrlSetData($x_location, $a[0])
$x_location = $a[0]
GUICtrlSetData($y_location, $a[1])
$y_location = $a[1]
vous utilisez les variables $x_location et $y_location comme des "contrôles ID" avec GUICtrlSetData et ensuite vous utilisez ces mêmes variables pour y mettre des coordonnées...

Bizarre votre truc.
Bref, de cette manière ça marche (avec Mousecoordmode à 2) :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt("Mousecoordmode",2)
Global $x, $y,$x_location,$y_location
Example()
Func Example()
Local $msg
HotKeySet("{Esc}", "touche_saisi")
GUICreate("Press Esc to Get Pos", 400, 400)
$x = GUICtrlCreateLabel("0", 10, 10, 50)
$y = GUICtrlCreateLabel("0", 10, 30, 50)
GUISetState()
; Run the GUI until the dialog is closed
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
EndFunc
Func GetPos() ;récupérer la position du curseur
Local $a
$a = GUIGetCursorInfo()
If @error Then Return SetError(1)
;~ GUICtrlSetData($x_location, $a[0])
$x_location = $a[0]
;~ GUICtrlSetData($y_location, $a[1])
$y_location = $a[1]
EndFunc
Func touche_saisi() ; différente vérification et cliquage
$i = 0
GetPos()
If @error Then Return
Sleep(1000)
MouseClick("left", $x_location, $y_location, 1, 50)
Msgbox(0, "", $x_location&" "&$y_location)
$i = $i + 1
EndFunc
Edité : code édité...
Re: [..] Problème mouseclick
Posté : dim. 19 juil. 2009 22:38
par baddark
Merci mais cela ne fonctionne pas :s j'avais pas fais attention, effectivement c'est très improbable.
Je viens de découvrir autre chose quand j'appuie sur F3 (la touche d'activation du mouseclick) et que mon curseur est dans la fenêtre de mon autoclick, les coordonnées sont les bons mais dès que je sors de cette fenêtre, seul le premier est bon :/
C'est très bizarre !