Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Traduire des touches [ Système / Périphérique ] (iow4)

samedi 31 mars 2007 à 23:04:35 | Traduire des touches

iow4

Membre Club
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.

dimanche 1 avril 2007 à 02:34:05 | Re : Traduire des touches

Lutinore

Administrateur CodeS-SourceS

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


dimanche 1 avril 2007 à 15:34:48 | Re : Traduire des touches

iow4

Membre Club
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.

dimanche 1 avril 2007 à 16:43:17 | Re : Traduire des touches

Lutinore

Administrateur CodeS-SourceS
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.

dimanche 1 avril 2007 à 18:09:03 | Re : Traduire des touches

iow4

Membre Club
Ok c'est fait mais à la compilation j'ai une erreur pour les 4  constantes dans le switch, exemple :


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


J'ai cherché sur msdn, il n'est donné null part l'entier que designe ces constantes...

Merci

dimanche 1 avril 2007 à 18:26:40 | Re : Traduire des touches

iow4

Membre Club
c'est bon ça marche ! j'ai trouvé les constantes !


        private const int WM_LBUTTONDOWN = 0x0201;
        private const int WM_RBUTTONDOWN = 0x0204;
        private const int WM_MBUTTONDOWN = 0x0207;
        private const int WM_XBUTTONDOWN = 0x020B;



Lutinor t'es trop fort ! Longue vie à toi

dimanche 1 avril 2007 à 18:44:45 | Re : Traduire des touches

Lutinore

Administrateur CodeS-SourceS
Merci... je suis content que ça marche j'avais pas de souris avec 5 boutons pour tester.

dimanche 1 avril 2007 à 19:53:53 | Re : Traduire des touches

iow4

Membre Club
Je soigne un peu la source et le programme et je poste sur ce site.

mercredi 2 juillet 2008 à 13:46:18 | Re : Traduire des touches

killsnip

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

mercredi 2 juillet 2008 à 13:49:21 | Re : Traduire des touches

iow4

Membre Club
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



Cette discussion est classé dans : boutons, dll, touches, traduire, user32


Répondre à ce message

Sujets en rapport avec ce message

c#, touche du clavier [ par stiley1 ] salut , j'ai 3 boutons (btn1, btn2, btn3)je voudrais associer tes touches du claviers à ces boutons(touches raccourcies)echap=btns, entree=btns et z=b API user32.dll [ par spectresombre ] Salut,J'ai un soucis je n'arrive pas à récupérer le texte dans une richtextbox d'un autre programme (AOL en l'occurence)je donne le passage de mon sou Récuper les touches shift et ctrl dans un évènement [ par thiosyiasar ] Bonjour,Je voudrais savoir comment récupérer dans l'évenement suivant si les touches Maj ou Ctrl sont enfoncéesvoid TreeView_DoubleClick(object sender Prb avec DLL [ par pirate75000 ] C'est la premiere fois que je travail en C#Merci de votre aideJe dois appeller une fonction d'une Dll en c++ c'est ecrit de la maniere suivante:La str utilisation de DLL développée en C [ par regdobey ] Bonjour,j'ai du mal à utiliser une DLL (win32).Le prototype de la fonction que j'appelle est : int** allocation(int** r, int colonne, int ligne)En appeller des dll à l'execution en C# [ par ppao ] Comment utiliser les fonctions d'une dll ( en C#) qui n'était pas forcement présente lors de la compilation du programme.En gros, comment marche un pl Creer et enregistrer une dll .net pour l'utiliser en ASP [ par Kev33 ] Bonjour,J'essai de creer une dll en .net et de l'enregistrer avec la commande "regsvr32 madll.dll"mais j'ai une erreur : "madll.dll a été chargé mais [C#] heritage [ par zebulix131 ] bonsoir a touspourriez vous m'indiquer ou puis je trouver un exemple simple d'une fenetre qui herite d'une autre . Exemple l'image principale avec 2 b Toolbar et image ... [ par Thanos_the_yopper ] j'ai fais une ToolBar avec des boutons dedans, et j'ai mis une image sur chacun des boutons, mais y'a une bordure autour de l'image, du coup, mes bout webservice et dll [ par fryounet ] bonjour à tous je suis nouveau et je cherche des infos sur les webservice et accés de dll..en code managé et non managé...,j'aurai besoin d'exemples e


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.