Traduire des touches

iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 - 31 mars 2007 à 23:04
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 - 2 juil. 2008 à 13:49
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 avril 2007 à 02:34
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
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
1 avril 2007 à 15:34
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.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 avril 2007 à 16:43
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.
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
1 avril 2007 à 18:09
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
1 avril 2007 à 18:26
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 avril 2007 à 18:44
Merci... je suis content que ça marche j'avais pas de souris avec 5 boutons pour tester.
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
1 avril 2007 à 19:53
Je soigne un peu la source et le programme et je poste sur ce site.
0
killsnip Messages postés 1 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 2 juillet 2008
2 juil. 2008 à 13:46
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
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
2 juil. 2008 à 13:49
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
0
Rejoignez-nous