"Keys Hooking" avec conversion

Nowid50 Messages postés 45 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 29 octobre 2009 - 26 déc. 2008 à 14:28
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 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.

Merci d'avance pour vos idées :)

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
26 déc. 2008 à 15:22
Salut
Et quelle est ta question ?
"mais pas de façon globale" : moi, ça ne me dit rien.
0
Nowid50 Messages postés 45 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 29 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 ?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
Rejoignez-nous