Exemple de l'utilisation de mouse_event

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 453 fois - Téléchargée 39 fois

Contenu du snippet

Ben c'est un code pour les newbies, il montre comment arreter un PC proprement sans que vous touchiez a votre souris !
LLe code marche que si vous etes en 1024**** et sous Me, donc dsl mais la fleme de faire pour les autres !
En + j'ai un probleme le temps avant l'éxtintion du pc ne peut pas dépacer 1 min, donc si qqn pourrai résoudre le probleme...

Source / Exemple :


Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function SetCursorPos& Lib "user32" (ByVal X As Long, ByVal Y As Long)
Private Selection As Integer 'voir timer
'on déclare les constantes
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Const MOUSEEVENTF_WHEEL = &H80
Const MOUSEEVENTF_XDOWN = &H100
Const MOUSEEVENTF_XUP = &H200
Const WHEEL_DELTA = 120
Const XBUTTON1 = &H1
Const XBUTTON2 = &H2

Private Sub Command1_Click()
'on vérifie que le textbox ne comporte que des chiffres.
If IsNumeric(Me.Text1) = False Then
        MsgBox "Vous devez saisir des chiffres uniquement", vbCritical, "Erreur"
        Me.Text1 = ""
        Me.Text1.SetFocus
Else
Timer1.Interval = Text1.Text 'on met le temps avant l'extinssion du pc, que le gars a rempli
Timer1.Enabled = True 'on active le timer
Text1.Text = "" 'on nétoit le textbox
End If
End Sub

Private Sub Timer1_Timer()
    Select Case Selection
        Case 0
        'ici on déclare la position du curseur sur le bouton démmarer
        X = 30
        Y = 755
        'là on active la position du curseur
        SetCursorPos X, Y
        'ici on clique sur le bouton
        Call mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_ABSOLUTE, Me.Left, Me.Top, 0, 0) '
        'et là on relache la bouton
        Call mouse_event(MOUSEEVENTF_LEFTUP + MOUSEEVENTF_ABSOLUTE, Me.Left, Me.Top, 0, 0)
        Timer1.Interval = 1000
        Selection = 1
        Case 1
        'pareil sauf qu'on veut mettre sur arreter.
        X = 30
        Y = 725
        'on active le curseur sur arréter
        SetCursorPos X, Y
        'on clique
        Call mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_ABSOLUTE, Me.Left, Me.Top, 0, 0) '
        'on relache
        Call mouse_event(MOUSEEVENTF_LEFTUP + MOUSEEVENTF_ABSOLUTE, Me.Left, Me.Top, 0, 0)
        Selection = 2
        Case 2
        'vous avez compris...(on clique sur le bouton ok, de la fenetre qui s'ouvre)
        X = 460
        Y = 435
        SetCursorPos X, Y
        Call mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_ABSOLUTE, Me.Left, Me.Top, 0, 0) '
        Call mouse_event(MOUSEEVENTF_LEFTUP + MOUSEEVENTF_ABSOLUTE, Me.Left, Me.Top, 0, 0)
        End ' on met fin au prog avant l'arret de Windows
    End Select
End Sub

Conclusion :


SvP ne me chier pas dessus comme a chaque fois que quelqu'un pose une source !

A voir également

Ajouter un commentaire

Commentaires

Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2016

Je sais, ca date... mais bon, comme je suis tombé dessus pour l'API, j'en profite pour poster des commentaires.

Pour que cela puisse fonctionner sur toutes les résolutions, tu auras besoin d'utiliser :
screen.PrimaryScreen.WorkingArea

Au lieu de :
If IsNumeric(Me.Text1) = False
Tu peux mettre :
If Not IsNumeric(Me.Text1)

Pour que cela puisse fonctionner au delà de la minute :
Else
nb_secondes_écoulées = 0
nb_secondes_à_attendre=Text1.Text
Timer1.Interval = 1000 'On force le timer sur 1 seconde
Timer1.Enabled = True 'on active le timer
Text1.Text = "" 'on nettoit la textbox
End If
Private Sub Timer1_Timer()
Select Case Selection
Case 0
'ici on compte les secondes écoulées
nb_secondes_écoulées += 1if nb_secondes_écoulées >nb_secondes_à_attendre Then selection 1

Case 1
'ici on déclare la position du curseur sur le bouton démmarer

Au lieu de cliquer puis de relacher :
'on clique
Call mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_ABSOLUTE, Me.Left, Me.Top, 0, 0) '
'on relache
Call mouse_event(MOUSEEVENTF_LEFTUP + MOUSEEVENTF_ABSOLUTE, Me.Left, Me.Top, 0, 0)

Tu peux faire les 2 en même temps et si tu n'utilises pas la constante de déplacement de la souris, inutile de renseigner les dx et dy par des valeurs qui ne veulent plus rien dire sachant que même MOUSEEVENTF_ABSOLUTE devient inutile :
'on clique et on relache
Call mouse_event(MOUSEEVENTF_LEFTUP + MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0)

Et +1 Mémère !

Et @Lavabo : A part l'API non déclaré ou les constantes non renseignées, je ne vois pas de pb.
Messages postés
3
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
15 mars 2007

Merci pour ce code Je cherche à simuler le clic gauche par la touche F10
voici le code en tuilisant l'API mouse event

If e.KeyCode = Keys.F10 Then
SetCursorPos(Label1.Location.X, Label1.Location.Y)

'Le bouton gauche de la souris s'enfonce
Beep()
mouse_event(MOUSEEVENTF_LEFTDOWN, Label1.Location.X, Label1.Location.Y, 0, 0)

'le bouton gauche de la souris se relache
mouse_event(MOUSEEVENTF_LEFTUP, Label1.Location.X, Label1.Location.Y, 0, 0)
End If
If e.KeyCode = Keys.Escape Then
Me.Close()
End If
End Sub

Le programme s'execute bien , je déplace le curseur mais rien à faire pour le faire cliquer.
Quelqu'un aurait une idée???
Messages postés
90
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
27 juillet 2009

je crois keu tu peu po depasser les 1 minutes komme tu dit kar le timer ne peu po dépasser les 2^16 ;65536 plus exactement donc on peu po fair plus de 65.536Secondes.Donc fait des variables ;)
Messages postés
22
Date d'inscription
mercredi 20 novembre 2002
Statut
Membre
Dernière intervention
26 février 2003

hummmmm, ben je l'attend avec impatience! Je n'espere pas etre dessus ?!
Messages postés
4
Date d'inscription
dimanche 12 janvier 2003
Statut
Membre
Dernière intervention
24 février 2003

oups dsl j'ai cliké 2 fois ;)
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.