Hook clavier

Résolu
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007 - 1 sept. 2007 à 21:21
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 2 sept. 2007 à 09:49
Bonjours.
J'ai essayer de réaliser un programme pour faire un hook du clavier plus particulièrement de la combinaison "Control+C". J'ai essayer ce code :

        private void MyKeyPress(object sender, KeyPressEventArgs e)
        {            if (((Control.ModifierKeys & Keys.Control) Keys.Control) && (e.KeyChar (char)Keys.C))
            {
                // ....
            }
        }

Cependant cela ne fonctionne pas. Si je remplace Keys.Control par Keys.Shift, l'utilisation du code se fait sans problème. Ma question est : Est-il possible de récupéré la combinaison de touche "Control+C" ?

9 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
2 sept. 2007 à 02:08
Telle qu'est posée ta question, ça laisse plus penser à un event KeyPress standard qu'à un hook :-)
Le lien que tu donnes concerne effectivement un hook, et la réponse à la non détection de Control figure peut être dans la section FAQ de l'article.

/*
coq
MVP Visual C#
CoqBlog
*/
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 sept. 2007 à 23:57
Salut, ce n'est pas vraimment ce qu'on appelle un hook.. et certains contrôles peuvent interprétés la combinaisons Ctrl+C.

protected override void OnKeyDown( KeyEventArgs e )
{
    //base.OnKeyDown( e );


    if ( e.KeyCode Keys.C && e.Modifiers Keys.Control )
        MessageBox.Show( "Ctrl+C" );
}
0
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007
2 sept. 2007 à 01:23
Ce que j'utilise est bien un hook c'est certain. Je doit récupéré les touches du clavier sans focus sur mon appli c'est donc bien la méthode à utiliser.

J'ai remplacer la méthode par :
       private void MyKeyDown(object sender, KeyEventArgs e)
        {            if (e.KeyCode Keys.C && e.Modifiers Keys.Control)
            {
                // ...
            }
        }

Mais le resultat est le même.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
2 sept. 2007 à 01:30
Salut,

Aucune des méthodes citées ici ne repose sur des hook.
D'ailleurs pour ce que tu veux faire tu n'as peut être pas besoin de passer par un hook, jette un oeil à la source de seb : http://www.csharpfr.com/codes/CREEZ-VOS-PROPRES-RACCOURCIS-CLAVIER-NIVEAU-SYSTEME_33196.aspx

Dans le cas contraire il faudrat probablement regarder du côté de WH_KEYBOARD_LL.

/*
coq
MVP Visual C#
CoqBlog
*/
0

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

Posez votre question
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007
2 sept. 2007 à 01:46
Je me suis basé sur ce code http://www.codeproject.com/csharp/globalhook.asp
donc si sa n'est pas un hook ...
0
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007
2 sept. 2007 à 01:47
En tout cas merci pour ce lien [auteurdetail.aspx?ID=10023 coq]. Je vais me pencher dessus.
0
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007
2 sept. 2007 à 02:29
Je débute en C# (enfait c'est mon premier code) et je ne savais pas que les fonctions que javais montré pouvais être lié à autre chose qu'un hook clavier (même si javais pu m'en douter).
Une chose est sur, j'ai appris un truck aujourd'hui : Toujours lire les faq jusqu'au BOUT. Même si c'est en anglais.

Merci coq.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 sept. 2007 à 08:19
Tiens Coq à 2h du mat.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
2 sept. 2007 à 09:49
Voui, mais ça fait mal le lendemain :p

Les events "standards" du genre KeyPress etc sont en général levés lors du traitement des messages Windows par la méthode WndProc (équivalent de WindowProc) du contrôle. Mais elle ne traite que les messages qu'elle recoit, et qui lui sont donc destiné (ou que la "fenêtre" à demander à recevoir, via des choses comme RegisterHotkey par exemple).
Enfin, si tu as fait de la prog Win32 en C/C++ tu dois mieux maitriser ce sujet que moi.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous