Cette article tentera de réaliser deux petites applications codés en C++/Win32 qui permettent de verrouiller le clavier ou la souris jusqu’à ce que une séquence de touches soit taper dans l’ordre pour déverrouillé l’entrer.

Verrouiller le clavier

La première application consistera à bloquer le clavier, pour ce faire le programme installe un hook clavier avec SetWindowsHook() ensuite pour chaque touche appuyer elle l’enregistrer dans un tableau et vérifier ensuite si le contenu du tableau concorde avec la combinaison souhaiter.

Si lors d’un appuie sur une touche un certain délai est passé (300 milisecondes) le tableau est réinitialiser.

Si vous essayer le programme directement sachez que le mot a taper est « block » sans les guillemets

Le plus intéressant ici est la fonction de hook que voila

HHOOK hKeyHook = NULL;
DWORD lasttime = 0;

string content;

LRESULT CALLBACK KeyBoardHookProc_LL(int nCode, WPARAM wParam, LPARAM lParam )
{
    // Pour éviter d'enregistrer les touches relacher
    if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP)
        return CallNextHookEx(hKeyHook, nCode, wParam, lParam);

    // On ne fait rien dans ce cas (cf aide API)
    if(nCode < 0 || nCode == HC_NOREMOVE)
        return CallNextHookEx(hKeyHook, nCode, wParam, lParam);

    KBDLLHOOKSTRUCT* hooked = (KBDLLHOOKSTRUCT*)lParam;

    BYTE keysState[256] = {0};

    if(GetKeyboardState(keysState))
    {
        WORD asciiKey = 0;
        ToAscii(hooked->vkCode, hooked->scanCode ,keysState, &asciiKey,0);

        if(hooked->time - lasttime > 300)
            content.clear();

        lasttime = hooked->time;

        content += asciiKey;

        if(content == "block")
        {
            PostMessage(0, WM_QUIT, 0, 0);
        }
    }

    return 1;
}

Télécharger l’outil de verrouillage du clavier avec les sources et le Makefile


Verrouiller la souris

La deuxième application qui est très similaire a la première permet de bloquer cette fois ci la souris jusqu’à ce que une séquence de touche soit taper dans l’ordre.

Pour ce faire l’application installe un hook clavier avec SetWindowsHook() de type MouseHookProc_LL, ensuit pour chaque touche appuyer elle l’enregistrer dans un tableau et vérifier ensuite si le contenu du tableau concord avec la combinaison souhaiter.

Si lors d’un appuie sur une touche un certain délai est passé (300 milisecondes) le tableau est réinitialiser.

Si vous essayer le programme directement sachez que la séquence de touche est Gauche, Droite, Droite, Gauche de la souris

Le plus intéressant ici est la fonction de hook que voila

HHOOK hKeyHook = NULL;
DWORD lasttime = 0;

vector mouseHistory;
vector mouseCode;

LRESULT CALLBACK MouseHookProc_LL(int nCode, WPARAM wParam, LPARAM lParam )
{
    // On ne fait rien dans ce cas (cf aide API)
    if(nCode < 0)
        return CallNextHookEx(hKeyHook, nCode, wParam, lParam);

    if(wParam == WM_LBUTTONDOWN || wParam == WM_RBUTTONDOWN)
    {
        MSLLHOOKSTRUCT* hooked = (MSLLHOOKSTRUCT*)lParam;

        if(hooked->time - lasttime > 300)
            mouseHistory.clear();

        lasttime = hooked->time;

        mouseHistory.push_back(wParam);

        if(mouseHistory == mouseCode)
        {
            PostMessage(0, WM_QUIT, 0, 0);
        }
    }

    return 1;
}

Télécharger l’outil de verrouillage de la souris avec les sources et le Makefile