Nowid50
Messages postés45Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention29 octobre 2009
-
26 déc. 2008 à 14:28
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
27 déc. 2008 à 13:09
Bonjour,
Dans le cadre d'une petite application, j'ai a réaliser un petit Key Hooker.
Le principe est simple, c'est de "convertir" les entrées suivantes :
Numpad2 -> Bas
Numpad3 -> Page Down
Numpad4 -> Gauche
Numpad5 -> Espace
Numpad6 -> Droite
Numpad8 -> Haut
Numpad9 -> Page Up
J'ai déja écrit le code suivant :
<hr size="2" width="100%" />Public Class Form1
'Keys
Dim DownKey As Boolean = False
Dim UpKey As Boolean = False
Dim LeftKey As Boolean = False
Dim RightKey As Boolean = False
Dim PgUp As Boolean = False
Dim PgDwn As Boolean = False
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Bck.RunWorkerAsync()
Button1.Enabled = False
Button2.Enabled = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Bck.CancelAsync()
Button1.Enabled = True
Button2.Enabled = False
End Sub
Private Sub Bck_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Bck.DoWork
Do
If Bck.CancellationPending Then
Exit Do
End If
Application.DoEvents()
If DownKey Then SendKeys.SendWait(Keys.Down)
If LeftKey Then SendKeys.SendWait(Keys.Left)
If UpKey Then SendKeys.SendWait(Keys.Up)
If RightKey Then SendKeys.SendWait(Keys.Right)
If PgDwn Then SendKeys.SendWait(Keys.PageDown)
If PgUp Then SendKeys.SendWait(Keys.PageUp)
Loop
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean DownKey keyData Keys.NumPad2 UpKey keyData Keys.NumPad8 LeftKey keyData Keys.NumPad4 RightKey keyData Keys.NumPad6 PgDwn keyData Keys.PageDown PgUp keyData Keys.PageUp
End Function
End Class
<hr size="2" width="100%" />Cela fonctionne dans le programme mais pas de façon globale, car le principe est de renvoyer ces touches dans un autre programme.
Nowid50
Messages postés45Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention29 octobre 2009 26 déc. 2008 à 16:38
Pardon pour ce manque de précision, "globale" signifie que je voudrais que cela soit une tache de fond. Car le code que j'indique fonctionne mais uniquement si la fenetre a le focus sinon le code ne fonctionne pas.
Je pense que SendKeys.SendWait fonctionne indépendement du focus non ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 27 déc. 2008 à 13:09
Re
Et non, SendKeys enverra l'ordre à la fenêtre qui a actuellement le focus.
La question est "Est-ce que ton programme Bck continue à capturer les touches lorsqu'il n'a plus le focus ?"
Je ne connais pas assez .Net pour te répondre, désolé.
Je ne sais pas ce que ces commandes provoquent :
Bck.RunWorkerAsync()
Bck.CancelAsync()
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)