DÉPLACER LA SOURIS PAR CLAVIER

e_NeX Messages postés 104 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 30 novembre 2009 - 1 oct. 2006 à 01:40
cs_antho2005 Messages postés 150 Date d'inscription samedi 8 avril 2006 Statut Membre Dernière intervention 1 mai 2012 - 18 juin 2008 à 21:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39748-deplacer-la-souris-par-clavier

cs_antho2005 Messages postés 150 Date d'inscription samedi 8 avril 2006 Statut Membre Dernière intervention 1 mai 2012 3
18 juin 2008 à 21:01
Je sais, cette source est vieille ...

Elle est pas trop mal mais:
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Right Then
Windows.Forms.Cursor.Position = New Point(Windows.Forms.Cursor.Position.X + 10, Windows.Forms.Cursor.Position.Y)
End If
If e.KeyCode = Keys.Left Then
Windows.Forms.Cursor.Position = New Point(Windows.Forms.Cursor.Position.X - 10, Windows.Forms.Cursor.Position.Y)
End If
If e.KeyCode = Keys.Down Then
Windows.Forms.Cursor.Position = New Point(Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y + 10)
End If
If e.KeyCode = Keys.Up Then
Windows.Forms.Cursor.Position = New Point(Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y - 10)
End If
If e.KeyCode <> Keys.Right And e.KeyCode <> Keys.Left And e.KeyCode <> Keys.Down And e.KeyCode <> Keys.Up Or e.KeyCode = Keys.Escape Then
Me.Close()
End If
End Sub

Comme ça, plus besoin de label ni de timer ...

A+
spidermario Messages postés 121 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 14 mars 2009 1
18 oct. 2006 à 17:19
Sinon j'ai écrit un autre code qui marche également, même si il ne gère le déplacement que dans une direction à la fois :
Const d As System.Int32 = 8
Private Sub appui_sur_touche(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
Select Case e.KeyValue()
Case 37
System.Windows.Forms.Cursor.Position() = New System.Drawing.Point(System.Windows.Forms.Cursor.Position().X() - d, System.Windows.Forms.Cursor.Position().Y())
Case 38
System.Windows.Forms.Cursor.Position() = New System.Drawing.Point(System.Windows.Forms.Cursor.Position().X(), System.Windows.Forms.Cursor.Position().Y() - d)
Case 39
System.Windows.Forms.Cursor.Position() = New System.Drawing.Point(System.Windows.Forms.Cursor.Position().X() + d, System.Windows.Forms.Cursor.Position().Y())
Case 40
System.Windows.Forms.Cursor.Position() = New System.Drawing.Point(System.Windows.Forms.Cursor.Position().X(),System.Windows.Forms.Cursor.Position().Y() + d)
End Select
End Sub
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
4 oct. 2006 à 13:40
Oui, bien sur ;)
N'empeche que c'est une solution simple pour par exemple mettre la souris sur le controle de ton choix...
Ou encore empecher la souris de sortir d'un bouton
...
CrazyMan19 Messages postés 163 Date d'inscription samedi 2 août 2003 Statut Membre Dernière intervention 4 novembre 2013 15
3 oct. 2006 à 23:14
chez moi ca se plante, en plus votre téchnique seras uniltile hors votre application parceque le KeyDown est un évenement propore à votre application c'est pourquoi jt ai deja dit faire un hook globale est la parafite solution pour faire ce genre de programme
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
3 oct. 2006 à 18:26
Ma technique ne bloque pas l'utilisation "normale" de la souris ;)
Par contre, en effet, il faudrait detecter les touches du clavier autrement que par Form.OnKeyDown, mais ca se trouve ;)
CrazyMan19 Messages postés 163 Date d'inscription samedi 2 août 2003 Statut Membre Dernière intervention 4 novembre 2013 15
3 oct. 2006 à 03:30
Votre méthode n'est pas la méthode parfaite pour contrôler une couris; premier probleme c'est qu'on lance votre programme on peux plus contrôler la souris normalement c'est à dire soit on le contrôle avec les flêches soit elle restera planter, deuxième problème c'est quand on met la souris sur un lien, le lien n'est pas activé et si on click la dessus votre programme arrête. Pour mon point de vue la manière la plus parfaite pour faire ce que vous voulez c'est le HOOKING et précisement ce qu'on appelle le GLOBAL HOOKING alors cherche cette téchnique elle pourras t'aider à perfectionner votre programme :)
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
2 oct. 2006 à 16:24
' Version Améliorée
Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Code généré par le Concepteur Windows Form "

Public Sub New()
MyBase.New()

'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()

'Ajoutez une initialisation quelconque après l'appel InitializeComponent()

End Sub

'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer

'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents Timer1 As System.Windows.Forms.Timer
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
'
'Timer1
'
Me.Timer1.Interval = 1
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(120, 120)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
Me.Name = "Form1"
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Form1"
Me.WindowState = System.Windows.Forms.FormWindowState.Maximized

End Sub

#End Region

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Right Then
X = 1
End If
If e.KeyCode = Keys.Left Then
X = -1
End If
If e.KeyCode = Keys.Down Then
Y = 1
End If
If e.KeyCode = Keys.Up Then
Y = -1
End If
If e.KeyCode <> Keys.Right And e.KeyCode <> Keys.Left And e.KeyCode <> Keys.Down And e.KeyCode <> Keys.Up Or e.KeyCode = Keys.Escape Then
Me.Close()
End If
End Sub
Private X, Y As Integer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim NewX, NewY As Integer
NewX = Cursor.Position.X + X
NewY = Cursor.Position.Y + Y
If NewX < 0 Then NewX = 0
If NewX > Screen.PrimaryScreen.Bounds.Right Then NewX = Screen.PrimaryScreen.Bounds.Right
If NewY < 0 Then NewY = 0
If NewY > Screen.PrimaryScreen.Bounds.Bottom Then NewY = Screen.PrimaryScreen.Bounds.Bottom
Cursor.Position = New Point(NewX, NewY)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Dim X As Integer = 1
'Me.Opacity = X / 100
MessageBox.Show("Pour déplacer tapez sur les flèches du clavier et pour fermer appuyer sur échap ou sur la souris.")
Timer1.Enabled = True
End Sub
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
Me.Close()
End Sub

Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp
X 0 : Y 0
End Sub
End Class
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
2 oct. 2006 à 07:51
Bonjour,

ce n'est pas véritablement un déplacement de souris puisque cela empeche le vrai mais il y a de l'idée...
etiennexxx9 Messages postés 27 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 3 décembre 2007
1 oct. 2006 à 22:55
Salut,
Je vois pas l'intérêt de cette source, puisque Windows XP intègre une option similaire (Touches Souris, dans Options d'Accessibilités). Je sais pas si win 9x/me intègrent cette option...(si non, ca pourait etre utile...)
Ah un intérêt: apprendre à contrôler la souris.

Bonne prog,
Etienne
e_NeX Messages postés 104 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 30 novembre 2009
1 oct. 2006 à 01:40
lut, précise que ta source est en .NET ;)