Page 1 sur 1

[..] Effectuer des clics en arrière plan

Posté : dim. 21 févr. 2016 16:32
par kandoo
Bonjour,

Je débute en AutoIt, et je souhaite créer un programme qui effectuerait des clics et des déplacements sur une page donnée ( une macro quoi ), sans me déranger dans mes activités parallèles.
Donc je voudrais effectuer des clics qui n'utilisent pas le curseur de la souris..

Sachant que j'ai essayer d'utiliser la fonction normal de MouseClick et que je n'arrive même pas à l'utiliser ...:

Code : Tout sélectionner

MouseClick ( "left" [, 120, 200 [, clicks = 1 [, speed = 10]]] )
Mais bon, de toute façon il me semble que c'est pas la fonction adapté à ma requête puisque cette fonction se servira de mon curseur et n'indique pas la page dans laquelle il va effectuée les clics...

Pourriez-vous me guider sur quels fonctions dois-je utiliser ? Et comment utiliser celle-ci ?


A savoir qu"après quelques recherches, j'ai trouvé un début de code, mais je ne sais pas comment l'exploiter ...

Code : Tout sélectionner

Func Win_Click($Title, $iButton = "left", $X = "", $Y = "", $iClicks = 1) 
    Local $Full = WinGetTitle ($Title) 
    Local $HWnD = WinGetHandle ($Full) 
    Local $MK_LBUTTON       =  0x0001 
    Local $WM_LBUTTONDOWN   =  0x0201 
    Local $WM_LBUTTONUP     =  0x0202 
    Local $MK_RBUTTON       =  0x0002 
    Local $WM_RBUTTONDOWN   =  0x0204 
    Local $WM_RBUTTONUP     =  0x0205 
    Local $WM_MOUSEMOVE     =  0x0200 
    Local $i                = 0 
    If IsHWnD ($HWnD) And WinExists ($Full) <> '0' Then 
        Select 
        Case $iButton = "left" 
           $Button     =  $MK_LBUTTON 
           $ButtonDown =  $WM_LBUTTONDOWN 
           $ButtonUp   =  $WM_LBUTTONUP 
        Case $iButton = "right" 
           $Button     =  $MK_RBUTTON 
           $ButtonDown =  $WM_RBUTTONDOWN 
           $ButtonUp   =  $WM_RBUTTONUP 
        EndSelect 

        If $X = "" OR $Y = "" Then 
           $MouseCoord = MouseGetPos() 
           $X = $MouseCoord[0] 
           $Y = $MouseCoord[1] 
        EndIf 

        For $i = 1 to $iClicks 
           DllCall("user32.dll", "int", "SendMessage","hwnd",$HWnD,"int",$WM_MOUSEMOVE,"int",0,"long",_MakeLong($X, $Y)) 
           DllCall("user32.dll", "int", "SendMessage","hwnd",$HWnD,"int",$ButtonDown,"int",$Button,"long",_MakeLong($X, $Y)) 
           DllCall("user32.dll", "int", "SendMessage","hwnd",  $HWnD,"int",$ButtonUp,"int",   $Button,"long",  _MakeLong($X, $Y)) 
        Next 
    EndIf 
EndFunc
Svp, merci d'avance !

Re: [..]Effectuer des clics en arrière plan

Posté : dim. 21 févr. 2016 17:50
par orax
Bienvenue sur le forum, :mrgreen:

ControlClick() sera plus adapté.
Si par page tu veux dire page internet alors regarde plutôt les fonctions commençant par _IE (comme_IECreate()) pour contrôler Internet Explorer.

Re: [..]Effectuer des clics en arrière plan

Posté : dim. 21 févr. 2016 17:51
par mikell
... sans me déranger dans mes activités parallèles
C'est ça qui est compliqué...
C'est quoi la page sur laquelle tu veux cliquer ?

Re: [..]Effectuer des clics en arrière plan

Posté : dim. 21 févr. 2016 18:43
par kandoo
Edit : J'ai réussi à effectuer les cliques avec ce code :

Code : Tout sélectionner

Func Win_Click ($Title, $iButton = "left", $X = "", $Y = "", $iClicks = 1)
	Local $Full = WinGetTitle ($Title)
    Local $HWnD = WinGetHandle ($Full)
    Local $MK_LBUTTON       =  0x0001
    Local $WM_LBUTTONDOWN   =  0x0201
    Local $WM_LBUTTONUP     =  0x0202
    Local $MK_RBUTTON       =  0x0002
    Local $WM_RBUTTONDOWN   =  0x0204
    Local $WM_RBUTTONUP     =  0x0205
    Local $WM_MOUSEMOVE     =  0x0200
    Local $i                = 0
    If IsHWnD ($HWnD) And WinExists ($Full) <> '0' Then
        Select
        Case $iButton = "left"
           $Button     =  $MK_LBUTTON
           $ButtonDown =  $WM_LBUTTONDOWN
           $ButtonUp   =  $WM_LBUTTONUP
        Case $iButton = "right"
           $Button     =  $MK_RBUTTON
           $ButtonDown =  $WM_RBUTTONDOWN
           $ButtonUp   =  $WM_RBUTTONUP
        EndSelect

        If $X = "" OR $Y = "" Then
           $MouseCoord = MouseGetPos()
           $X = $MouseCoord[0]
           $Y = $MouseCoord[1]
        EndIf

        For $i = 1 to $iClicks
           DllCall("user32.dll", "int", "SendMessage","hwnd",$HWnD,"int",$WM_MOUSEMOVE,"int",0,"long",_MakeLong($X, $Y))
           DllCall("user32.dll", "int", "SendMessage","hwnd",$HWnD,"int",$ButtonDown,"int",$Button,"long",_MakeLong($X, $Y))
           DllCall("user32.dll", "int", "SendMessage","hwnd",  $HWnD,"int",$ButtonUp,"int",   $Button,"long",  _MakeLong($X, $Y))
        Next
    EndIf
 EndFunc
 Func _MakeLong($LoWord,$HiWord)
    Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc

Win_Click("TM_FR - Opera","left",120,200,1)
Cependant après j'aimerais savoir comment faire répéter à l'infini cette boucle ?

Edit : J'ai utiliser la fonction

Code : Tout sélectionner

While 1
    ; Mes actions
Wend
Mais comment je pourrais faire pour dire tant que cette fenêtre est ouverte alors le script continue ?

Merci d'avance !

Re: [..] Effectuer des clics en arrière plan

Posté : mar. 01 mars 2016 17:31
par Cazeu64
Bonsoir,

Code : Tout sélectionner

While WinExists("TM_FR - Opera") <> 0

	Win_Click("TM_FR - Opera","left",120,200,1)
	; Autres actions ici
	
Wend
Tant que la fenêtre nommée "TM_FR - Opera" existe, on boucle le code.

Voila, en espérant t'avoir aidé.

Bonne soirée :)