Page 1 sur 2

Simuler les évènements souris

Publié : dim. 08/août/2004 15:48
par Oliv
Suite à la discution avec Dobro, voici un code (puisil y aura une librairie) qui permet de simuler le déplacement et les clicks souris. L'annimation fournie fait démarrer => arrêter => annuler sur un PC avec un menu démarrer style XP, résolution 1024*768, barre des taches en bas (si ce n'est pas pareil chez vous ça marche quand même :P ).
Pour savoir quels coordonnées mettre, on peut utiliser ce code :

Code : Tout sélectionner

lpPoint.point 
Repeat 
  GetCursorPos_(lpPoint) 
  Debug "X = " + Str(lpPoint\X) 
  Debug "Y = " + Str(lpPoint\Y) 
  Debug "" 
  Delay(50) 
ForEver 
Et pour le code de simulation:

Code : Tout sélectionner

#D_Bas = 0 : #D_Haut = 1 : #D_Click = 2 : #D_DoubleClick = 3 ; bouton de droite
#G_Bas = 4 : #G_Haut = 5 : #G_Click = 6 : #G_DoubleClick = 8 ; Bouton de gauche
#M_Bas = 9 : #M_Haut = 10 : #M_Click = 11 : #M_DoubleClick = 12 ; bouton du milieu

Procedure MouseEvent(Ereignis.l) 
  Mem.l=GlobalAlloc_(0,8) 
  GetCursorPos_(Mem) 
  mouse_event_(Ereignis | $8000,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_()) 
  GlobalFree_(Mem) 
EndProcedure 

Procedure MouseClick(Option.b)
  Select Option
    Case #G_Bas
      MouseEvent($2)
    Case #G_Haut
      MouseEvent($4)
    Case #G_Click
      MouseEvent($2)
      MouseEvent($4)
    Case #G_DoubleClick
      MouseEvent($2) 
      MouseEvent($4)
      MouseEvent($2) 
      MouseEvent($4)
      
    Case #D_Bas
      MouseEvent($8)
    Case #D_Haut
      MouseEvent($10)
    Case #D_Click
      MouseEvent($8) 
      MouseEvent($10)
    Case #D_DoubleClick
      MouseEvent($8) 
      MouseEvent($10)
      MouseEvent($8) 
      MouseEvent($10)
      
    Case #M_Bas
      MouseEvent($20)
    Case #M_Haut
      MouseEvent($40)
    Case #M_Click
      MouseEvent($20) 
      MouseEvent($40)
    Case #M_DoubleClick
      MouseEvent($20) 
      MouseEvent($40)
      MouseEvent($20) 
      MouseEvent($40)
  EndSelect
EndProcedure

Procedure MouseMove(DX.l,DY.l,AX.l,AY.l,VX.l,VY.l,Delay.l)
; Arguments : Depart X -  Depart Y - Arrivée X - Arrivée Y - Vitesse X - Vitesse Y - Temps d'attente entre deux boucles)
  If DX - AX > 0 ; Si on va vers la gauche
    SensX = 1
  EndIf
  If DY- AY > 0 ; Si on va vers le haut
    SensY = 1
  EndIf
  Repeat
    If SensX = 1
      If DX > AX
        DX - VX
      Else
        DX = AX
      EndIf
    Else
      If DX < AX
        DX + VX
      Else
        DX = AX
      EndIf
    EndIf
    If SensY = 1
      If DY > AY
        DY - VY
      Else
        DY = AY
      EndIf
    Else
      If DY < AY
        DY + VY
      Else
        DY = AY
      EndIf
    EndIf
    SetCursorPos_(DX,DY)
    If DX = AX And DY = AY : Break : EndIf
    Delay(Delay)
  ForEver
EndProcedure

SetCursorPos_(10,760) ; Place le curseur sur démarrer
MouseClick(#G_Click)
MouseMove(10,760,310,710,5,1,20)
MouseClick(#G_Click)
MouseMove(310,710,650,372,5,5,20)
MouseClick(#G_Click)

Publié : dim. 08/août/2004 19:13
par Le Soldat Inconnu
amusant :D

Publié : dim. 08/août/2004 20:22
par Backup
rajoute une petite procedure qui renvoi la coordone ACTUEL du pointeur
de cette facon on pourra voir la souris aller de l'endroit ou elle se trouve a l'endroit programé !!
un peut comme ça !!

Code : Tout sélectionner

 
    GetCursorPos_(CursorPos.POINT)
    MouseX = CursorPos\x
    MouseY = CursorPos\y
    
MouseMove( MouseX,MouseY,10,760,5,1,10)
j'ai pas compris dedans tu dit
Arguments : Depart X - Depart Y - Arrivée X - Arrivée Y - Vitesse X -
et pourtants les arguments on l'air d'etre imbrique !! ?????

Code : Tout sélectionner

 MouseMove(dx.l,AX.l,dy.l,AY.l,VX.l,VY.l,Delay.l)

dans ça moi je comprend
dx =depar_x
AX =arrivee_x
dy=depart_y
AY=arrivee_y
????????????????



l'ai de rien cela peut etre tres util au handicapé !!

tu met cett fonction accessible sur l'un des bouton de la souris
et lorsque la personne clique ! hop cela lance la fonction preprogramé !!

(purée j'ai de trop bonnes ideés moAaaaa !! )
:lol:

Publié : dim. 08/août/2004 20:45
par Oliv
elle sont peut-être bonnes mais incompréhensibles :wink:
rajoute une petite procedure qui renvoi la coordone ACTUEL du pointeur
ça je comprends moyenement, tu veux la renvoyer dans un code ou l'afficher à l'écran ?
de cette facon on pourra voir la souris aller de l'endroit ou elle se trouve a l'endroit programé !!
Tu ne la voit pas se déplacer toi ????
tu met cett fonction accessible sur l'un des bouton de la souris
et lorsque la personne clique ! hop cela lance la fonction preprogramé !!
Tu veux dire si quelqu'un clique, on envoi une certaine série de clicks ?

Publié : dim. 08/août/2004 21:10
par Backup
Citation:
rajoute une petite procedure qui renvoi la coordone ACTUEL du pointeur

ça je comprends moyenement, tu veux la renvoyer dans un code ou l'afficher à l'écran ?
je t'avai mis un exemple tres clair pourtant !!
le revoici :

Code : Tout sélectionner

  
    GetCursorPos_(CursorPos.POINT)
    MouseX = CursorPos\x
    MouseY = CursorPos\y
   
MouseMove( MouseX,MouseY,10,760,5,1,10)





Citation:
de cette facon on pourra voir la souris aller de l'endroit ou elle se trouve a l'endroit programé !!
Tu ne la voit pas se déplacer toi ????
ben ton "SetCursorPos_(10,760) " met le curseur directement a la position 10,760 !!!!! et la franchement j'ai de tres bon yeux mais je la vois vraiment pas aller de la position ou ma souris se trouve au moment de lancer le programme, a la position 10,760 !!!
c'est cela que je demande plus haut !!!
pas que la souris soit deplacé brutalement a la position 10,760
mais que progressivement elle parte de l'endroit ou elle se trouve pour aller en 10,760 !! you endaire stande ??? nao ?? :D





Citation:
tu met cett fonction accessible sur l'un des bouton de la souris
et lorsque la personne clique ! hop cela lance la fonction preprogramé !!

Tu veux dire si quelqu'un clique, on envoi une certaine série de clicks ?
non mettre un deplacement programé sur le bouton gauche
et un autre sur le bouton du millieu par exemple

le gars clic avec le bouton du millieu et a chaque clique cela fait monter le curseur d'un certain nombre de pixel !!
et le bouton droit ferai descendre le pointeur d'autant !!

mais cela peut etre pour aller a gauche ou a droite !!
suivant le manque de mobilité de la personne handicapé ! :)



tu m'explique la !!
j'ai pas compris dedans tu dit
Citation:
Arguments : Depart X - Depart Y - Arrivée X - Arrivée Y - Vitesse X -

et pourtants les arguments on l'air d'etre imbrique !! ?????

Code:
MouseMove(dx.l,AX.l,dy.l,AY.l,VX.l,VY.l,Delay.l)

dans ça moi je comprend
dx =depar_x
AX =arrivee_x
dy=depart_y
AY=arrivee_y
????????????????

Publié : dim. 08/août/2004 21:32
par Oliv
Quand je t'ai répondu, je ne voyais pas tout, j'avais justeune partie du message 8O 8O . Sinon j'aurais compris mais avec 1/4 du message (quasiment out mis en citations) je pouvais pas.

Pour le rajout de la fonction je pensais que chaqun le ferai mais tu as raison je le ferrai.

Code : Tout sélectionner

Procedure MouseMove(DX.l,AX.l,DY.l,AY.l,VX.l,VY.l,Delay.l)
; Arguments : Depart X - Depart Y - Arrivée X - Arrivée Y - Vitesse X - Vitesse Y - Temps en deux boucles)
C'est effectivement l'explication des paramètres, car j'ai pensé que DX et autres n'étaient pas parlants, et c'est vrai que je me suis planté, je corrige tout de suite en ça, merci :D

Code : Tout sélectionner

Procedure MouseMove(DX.l,AX.l,DY.l,AY.l,VX.l,VY.l,Delay.l)
; Arguments : Depart X -  Arrivée X - Depart Y - Arrivée Y - Vitesse X - Vitesse Y - Temps en deux boucles)
non mettre un deplacement programé sur le bouton gauche
et un autre sur le bouton du millieu par exemple

le gars clic avec le bouton du millieu et a chaque clique cela fait monter le curseur d'un certain nombre de pixel !!
et le bouton droit ferai descendre le pointeur d'autant !!

mais cela peut etre pour aller a gauche ou a droite !!
suivant le manque de mobilité de la personne handicapé !
Il vaut mieux mettre ça sur la molette car sinon après, on ne pourra plus cliquer sur un icone ou faire un click droit sans que la souris ce barre : pas pratique :wink: . Mais très bonne idée, si tu en as d'autres je prend (le message en entier c'est mieux aussi, là je comprends toujours pas ce qui c'est passé)

Publié : dim. 08/août/2004 23:16
par Backup
pour le coup ! tu pourrai pas nous la mettre comme ça

Code : Tout sélectionner

 MouseMove(dx.l,dy.l,AX.l,AY.l,VX.l,VY.l,Delay.l)
(je l'ai fait pour moi)

car je trouve que enchevetrer les paramettre c'est pas tres cool ! :)

je prefere que l'on donne les coordonées x et y de depart puis les coordonées x et y d'arrivée !!! pour moi c'est plus clair comme ça !! :D

surtout si tu doit faire une petite lib avec autant se mettre d'accord ! d'accord ? :D

sinon , j'ai oublier de te dire Bravo c'est du bon boulot ça !!
et ça va profiter a tous !! c'est ça qui est cool! :D

j'imagine regis en train de se faire une petite demo de ses soft avec c'ette lib

il va pouvoir montrer en direct comment utiliser son usine a gaz d'explorateur !!
:lol: :lol:

Merci encore d'etre ......... les pros du pure ou les pures pros
(ça fait pub pour les saucisses !! ) les purs porc !!! :lol: :lol: :lol:


:D

Publié : lun. 09/août/2004 10:33
par Le Soldat Inconnu
j'imagine regis en train de se faire une petite demo de ses soft avec c'ette lib
c'est pas c... enfin pas idiot pour une fois ce que tu dis :lol:

et d'abord, c'est quoi ce commentaire désobligeant sur mon Bi-Exploreur, hein alors :mrgreen:

Publié : lun. 09/août/2004 10:59
par Oliv
Le Soldat Inconnu a écrit :
j'imagine regis en train de se faire une petite demo de ses soft avec c'ette lib
c'est pas c... enfin pas idiot pour une fois ce que tu dis :lol:

et d'abord, c'est quoi ce commentaire désobligeant sur mon Bi-Exploreur, hein alors :mrgreen:
déjà l'idée de ce type de commandes, c'est de lui :P

Publié : lun. 09/août/2004 11:04
par Chris
et d'abord, c'est quoi ce commentaire désobligeant sur mon Bi-Exploreur, hein alors
Ben c'est la realité, tout simplement.

Windows Commander = Simple, Rapide, Efficace
Bi-Explorer = .... (No Comment)

Mais c'est mon avis perso, j'ai le droit de ne pas aimer, ce qui n'enlève rien à ton travail. :wink:

Publié : lun. 09/août/2004 11:32
par Backup
ho , pour moi , c'etait juste une blague !! :D

j'utilise n'y l'un n'y l'autre !!!

d'ailleurs j'envisage le retour au DOS
car au moins on se prenaient la tete pour quelque chose
maintenant c'est trop facile , y a plus d'interret !! :D
d'ailleur je m'amuse beaucoup avec les emulateurs en ce moment
rejouer a lemming avec "Steem" c'est exellent pour mes 2 neuronnes !! :lol:

déjà l'idée de ce type de commandes, c'est de lui Razz
disons que j'ai un quart de l'idee et que tu a fait les 3 quart du boulot !! :D :D

Publié : lun. 09/août/2004 11:42
par Oliv
oui a peut près :D (pour le quart :D ), d'ailleur j'ai encore besoin de ton imagination, comment renommer MouseMoveEx dans le code qui suis ?
Pour lemmings c'est vrai que c'était génial, j'ai appris à utiliser dos et le PC rien que pour jouer à ça. Il en on sortit un en 3D récement (1999 ?) mais il est moins bien.

enfin bon, j'ai ajouté la procédure MouseMoveEx() qui prend le coordonnées actuelles de la souris comme point de départ

Code : Tout sélectionner

#D_Bas = 0 : #D_Haut = 1 : #D_Click = 2 : #D_DoubleClick = 3 ; bouton de droite 
#G_Bas = 4 : #G_Haut = 5 : #G_Click = 6 : #G_DoubleClick = 8 ; Bouton de gauche 
#M_Bas = 9 : #M_Haut = 10 : #M_Click = 11 : #M_DoubleClick = 12 ; bouton du milieu 

Procedure MouseEvent(Ereignis.l) 
  Mem.l=GlobalAlloc_(0,8) 
  GetCursorPos_(Mem) 
  mouse_event_(Ereignis | $8000,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_()) 
  GlobalFree_(Mem) 
EndProcedure 

Procedure MouseClick(Option.b) 
  Select Option 
    Case #G_Bas 
      MouseEvent($2) 
    Case #G_Haut 
      MouseEvent($4) 
    Case #G_Click 
      MouseEvent($2) 
      MouseEvent($4) 
    Case #G_DoubleClick 
      MouseEvent($2) 
      MouseEvent($4) 
      MouseEvent($2) 
      MouseEvent($4) 
      
    Case #D_Bas 
      MouseEvent($8) 
    Case #D_Haut 
      MouseEvent($10) 
    Case #D_Click 
      MouseEvent($8) 
      MouseEvent($10) 
    Case #D_DoubleClick 
      MouseEvent($8) 
      MouseEvent($10) 
      MouseEvent($8) 
      MouseEvent($10) 
      
    Case #M_Bas 
      MouseEvent($20) 
    Case #M_Haut 
      MouseEvent($40) 
    Case #M_Click 
      MouseEvent($20) 
      MouseEvent($40) 
    Case #M_DoubleClick 
      MouseEvent($20) 
      MouseEvent($40) 
      MouseEvent($20) 
      MouseEvent($40) 
  EndSelect 
EndProcedure 

Procedure MouseMove(DX.l,DY.l,AX.l,AY.l,VX.l,VY.l,Delay.l) 
; Arguments : Depart X -  Depart Y - Arrivée X - Arrivée Y - Vitesse X - Vitesse Y - Temps d'attente entre deux boucles) 
  If DX - AX > 0 ; Si on va vers la gauche 
    SensX = 1 
  EndIf 
  If DY- AY > 0 ; Si on va vers le haut 
    SensY = 1 
  EndIf 
  Repeat 
    If SensX = 1 
      If DX > AX 
        DX - VX 
      Else 
        DX = AX 
      EndIf 
    Else 
      If DX < AX 
        DX + VX 
      Else 
        DX = AX 
      EndIf 
    EndIf 
    If SensY = 1 
      If DY > AY 
        DY - VY 
      Else 
        DY = AY 
      EndIf 
    Else 
      If DY < AY 
        DY + VY 
      Else 
        DY = AY 
      EndIf 
    EndIf 
    SetCursorPos_(DX,DY) 
    If DX = AX And DY = AY : Break : EndIf 
    Delay(Delay) 
  ForEver 
EndProcedure

Procedure MouseMoveEx(AX.l,AY.l,VX,VY,Delay)
  GetCursorPos_(Pos.point)
  MouseMove(Pos\X,Pos\Y,AX,AY,VX,VY,Delay)
EndProcedure

MouseMoveEx(10,760,5,5,20)
MouseClick(#G_Click) 
MouseMoveEx(310,710,5,1,20) 
MouseClick(#G_Click) 
MouseMoveEx(650,372,5,5,20) 
MouseClick(#G_Click) 
 

Publié : lun. 09/août/2004 18:48
par Backup
GEANT !!! :D

et en plus y a moins de parametres !!!



que pense tu de

mouse_go()
ou go_mouse()
mouse_start

bouge_de_la() :lol:

Publié : lun. 09/août/2004 19:40
par Backup
tien j'ai rajouté une fonction !!!

Mousesignale(x,y,taille,temp) car cela peut etre utile de signaler un truc sur l'ecran !!! :lol:

***********************************************
* x=x de l'endroit que l'on veut signaler *
* y=y de l'endroit que l'on veut signaler *
* taille = la taille du cercle *
* temps = le temps que l'on veut que dure l'effet !! :D *
***********************************************

Code : Tout sélectionner

#D_Bas = 0 : #D_Haut = 1 : #D_Click = 2 : #D_DoubleClick = 3 ; bouton de droite
#G_Bas = 4 : #G_Haut = 5 : #G_Click = 6 : #G_DoubleClick = 8 ; Bouton de gauche
#M_Bas = 9 : #M_Haut = 10 : #M_Click = 11 : #M_DoubleClick = 12 ; bouton du milieu

Procedure MouseEvent(Ereignis.l)
    Mem.l=GlobalAlloc_(0,8)
    GetCursorPos_(Mem)
    mouse_event_(Ereignis | $8000,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_())
    GlobalFree_(Mem)
EndProcedure

Procedure MouseClick(Option.b)
    Select Option
        Case #G_Bas
            MouseEvent($2)
        Case #G_Haut
            MouseEvent($4)
        Case #G_Click
            MouseEvent($2)
            MouseEvent($4)
        Case #G_DoubleClick
            MouseEvent($2)
            MouseEvent($4)
            MouseEvent($2)
            MouseEvent($4)
            
        Case #D_Bas
            MouseEvent($8)
        Case #D_Haut
            MouseEvent($10)
        Case #D_Click
            MouseEvent($8)
            MouseEvent($10)
        Case #D_DoubleClick
            MouseEvent($8)
            MouseEvent($10)
            MouseEvent($8)
            MouseEvent($10)
            
        Case #M_Bas
            MouseEvent($20)
        Case #M_Haut
            MouseEvent($40)
        Case #M_Click
            MouseEvent($20)
            MouseEvent($40)
        Case #M_DoubleClick
            MouseEvent($20)
            MouseEvent($40)
            MouseEvent($20)
            MouseEvent($40)
    EndSelect
EndProcedure

Procedure MouseMove(dx.l,dy.l,AX.l,AY.l,VX.l,VY.l,Delay.l)
    ; Arguments : Depart X -  Depart Y - Arrivée X - Arrivée Y - Vitesse X - Vitesse Y - Temps d'attente entre deux boucles)
    If dx - AX > 0 ; Si on va vers la gauche
        SensX = 1
    EndIf
    If dy- AY > 0 ; Si on va vers le haut
        SensY = 1
    EndIf
    Repeat
        If SensX = 1
            If dx > AX
                dx - VX
            Else
                dx = AX
            EndIf
        Else
            If dx < AX
                dx + VX
            Else
                dx = AX
            EndIf
        EndIf
        If SensY = 1
            If dy > AY
                dy - VY
            Else
                dy = AY
            EndIf
        Else
            If dy < AY
                dy + VY
            Else
                dy = AY
            EndIf
        EndIf
        SetCursorPos_(dx,dy)
        If dx = AX And dy = AY : Break : EndIf
        Delay(Delay)
    ForEver
EndProcedure

Procedure MouseMoveEx(AX.l,AY.l,VX,VY,Delay)
    GetCursorPos_(Pos.POINT)
    MouseMove(Pos\x,Pos\y,AX,AY,VX,VY,Delay)
EndProcedure


Procedure Mousesignale(AX.l,AY.l,taille,temp) 
    For compt=1 To temp
        x=taille * Cos( compt) + (AX.l )
        y=taille * Sin( compt) + (AY.l) 
        MouseMove(x,y,x+1,y+1,10,10,10) 
    Next compt
EndProcedure





Mousesignale(500,500,20,50)




Publié : mar. 10/août/2004 10:22
par Oliv
sympa :D Par contre MouseSignal, si tu l'appelle mouse, ne met pas de e à signal :wink: Pour Bouge_De_là c'est une bonne idée :D