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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
kandoo
Niveau 1
Niveau 1
Messages : 2
Enregistré le : dim. 21 févr. 2016 15:56
Status : Hors ligne

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

#1

Message 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 !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#2

Message 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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#3

Message 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 ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
kandoo
Niveau 1
Niveau 1
Messages : 2
Enregistré le : dim. 21 févr. 2016 15:56
Status : Hors ligne

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

#4

Message 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 !
Cazeu64
Niveau 1
Niveau 1
Messages : 6
Enregistré le : jeu. 25 févr. 2016 17:33
Status : Hors ligne

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

#5

Message 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 :)
Répondre