Savoir quelles touches sont enfoncées.

Savoir quelles touches sont enfoncées.

GetKeyState

Voir version :

Pas de dépendances

Télécharger :

#include <stdio.h>
#include <windows.h>

void ShowConsoleCursor(int showFlag)
{
    HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO     cursorInfo;
    GetConsoleCursorInfo(out, &cursorInfo);
    cursorInfo.bVisible = showFlag; // set the cursor visibility
    SetConsoleCursorInfo(out, &cursorInfo);
}

int main()
{
    system("mode con cols=300 lines=5");
    ShowConsoleCursor(0);
    while (1)
    {
        unsigned char c;
        for (c = 0; c < 255; c++)
        {
            if (GetKeyState(c) & 0x8000)
                printf("1");
            else
                printf("0");
        }
        printf("\r");
    }
    return 0;
}




Commentaires


	Ce programme affiche l'état des touches.
	1 -> la touche est enfoncée
	0 -> la touche n'est pas enfoncée

	Si vous testez le programme, vous verrez une colonie de 0
	Si vous enfoncez une ou plusieurs touches, certains vont devenir des 1

	Bonus : ça marche aussi pour les boutons de la souris.

	J'utilise salement "system" pour agrandir la console à 300 colonnes, car je veux afficher 256 chiffres
	cote à cote, donc je veux de la place !

	Puis j'enlève le curseur grâce à la fonction ShowConsoleCursor, sinon, on verrait le curseur danser.

	(dans cette fonction, je récupère les informations de la console dans une structure CONSOLE_CURSOR_INFO,
	je modifie la donnée qui cache le curseur, puis je mets à jour. Vous pourrez vous documenter sur les 
	fonctions utilises et ce que la structure a dans le ventre)

	Ensuite dans le programme, je fais une boucle infinie (c'est sale, c'est vrai)
	
	Et dedans un for de 0 a 255 qui regarde chaque touche, et met un 1 ou un 0

	Le \r final revient au début de la ligne pour recommencer.

	liste des touches et leur code :
	https://msdn.microsoft.com/fr-fr/library/windows/desktop/dd375731(v=vs.85).aspx