Traduire des touches

Signaler
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Bonjour,

J'ai une souris avec 5 boutons ( 2 sur le cotés, la mollete et les deux habituels ) seulement dans mon jeux favoris les deux boutons du coté sont pas reconnue alors je me demandais comment :
- Intercepter les cliques de ces deux boutons
- Envoyer un message au systeme pour lui dire que la touche A a été pressé par Exemple.

Pour le premier point, je sais qu'il faut faire un hook, mais quel est le code hexa pour choper un appuie sur un des deux boutons spécial ?
Pour le deuxieme point, je peux utiliser la méthode SendInput de user32.dll ou encore une methode managée SendKeys couplé à la methode non managé ForegroundWindows de user32.dll ( je dit tout ça de tête )

Merci pour votre aide.

9 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
Salut, un hook, RawInput ou DirectInput..

Si tu fais un LowLevelHook, les boutons 4 et 5 sont nommés X1 et X2. Dans la méthode callback le paramètre wParam doit contenir le message WM_XBUTTONDOWN et la paramètre lParam contient une structure MSLLHOOKSTRUCT avec le champ mouseData qui indique si il s'agit du bouton X1 ou  X2;


Ca donne quelque chose comme ça : ( pas testé, car j ai pas de souris avec 5 boutons )


private unsafe IntPtr LowLevelMouseProc( int code, UIntPtr wParam, IntPtr lParam )
{
    if ( code == HC_ACTION )
    {
        switch ( ( int )wParam )
        {
             case WM_LBUTTONDOWN :
                this.Text = "LEFT BUTTON";
                break;
            case WM_RBUTTONDOWN :
                this.Text = "RIGHT BUTTON";
                break;
            case WM_MBUTTONDOWN :
                this.Text = "MIDDLE BUTTON";
                break;
            case WM_XBUTTONDOWN : // X1 ou  X2
                MSLLHOOKSTRUCT* p = ( MSLLHOOKSTRUCT* )lParam;
                this.Text = "X" + ( ( short )( p->Data >> 16 ) ) + " BUTTON";
                break;
        }
    }
   
    return CallNextHookEx( hHook, code, wParam, lParam );
}


Pour SendInput, tu as un exemple ici :



http://www.csharpfr.com/infomsg_NUM-PAD-VIRTUEL-SENDINPUT_905039.aspx
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Salut,

Merci pour ta réponse, j'ai essayé d'adapter des codes sur Internet pour mettre en place un Hook mais sans succés.
Pourrais-tu m'aider stp

Merci encore.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
Tu as un exemple ici :

http://www.csharpfr.com/infomsg_EVENEMENT-IMPORTE-OU-SUR-ECRAN_745061.aspx

Suffit juste de remplace la  méthode LowLevelMouseProc par celle du message précédent. Attenton ce hook ne marche pas en mode DEBUG, j'pense que ça vient du fait que je le crée dans la forme.
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Ok c'est fait mais à la compilation j'ai une erreur pour les 4  constantes dans le switch, exemple :

<hr size="2" width="100%" />Erreur    1    Le nom 'WM_LBUTTONDOWN' n'existe pas dans le contexte actuel    C:\Documents and Settings\Thomas\Mes documents\Visual Studio 2005\Projects\TradTouch\TradTouch\Form1.cs    84    26    TradTouch
<hr size="2" width="100%" />
J'ai cherché sur msdn, il n'est donné null part l'entier que designe ces constantes...

Merci
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
c'est bon ça marche ! j'ai trouvé les constantes !

<hr size="2" width="100%" />        private const int WM_LBUTTONDOWN = 0x0201;
        private const int WM_RBUTTONDOWN = 0x0204;
        private const int WM_MBUTTONDOWN = 0x0207;
        private const int WM_XBUTTONDOWN = 0x020B;
<hr size="2" width="100%" />

Lutinor t'es trop fort ! Longue vie à toi
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
Merci... je suis content que ça marche j'avais pas de souris avec 5 boutons pour tester.
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Je soigne un peu la source et le programme et je poste sur ce site.
Messages postés
1
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
2 juillet 2008

Bonjour,

voila moi aussi je joue à un fps et j'ai besoin des 5 boutons de la souris.Je voulais savoir comment,après avoir télécharger le zip que tu a mis en ligne (merci a toi iow4) utiliser le hook.Faut-il un logiciel particulier?

merci
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Si je me rappel bien (ça date maintenant) J'ai remplacé le 3éme bouton de la souris (appuie sur la molette) par la touche R

Thomas,
http://iow4.net