IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

[Hardware] Peut on desactiver le clavier?


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut [Hardware] Peut on desactiver le clavier?
    Bonjour encore une question! Deux dans le meme jour c'est la fete!

    Bon serieusement, j'aimerai savoir si l'on peut desactiver le clavier pour eviter toutes commandes effectues par celui-ci, afin que seul un joystick et la souris soit utilisables?

    Est ce possible et dans ce cas comment peut on faire... ?

    Ps: Apres une recherche j'ai trouve ce post: http://www.developpez.net/forums/viewtopic.php?t=111137
    Mais je dois reconnaitre que le niveau est un peu trop haut pour moi sur ce sujet...

  2. #2
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    Salut.

    Tu peux faire un hook qui bloque toute entrée au clavier...
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Tu peux faire un hook qui bloque toute entrée au clavier...
    Oui effectivement j'y pensais, mais je dois dire que moi et les Hooks ca fait deux!!!

    Pourrais tu me permettre d'agrandir un peu plus ma culture sur ce sujet? Meme si je sais qu'il existe le tuto ici: http://tcharles.developpez.com/simul/#controleclavier

    Sans plaisanter j'ai beaucoup de mal la dessus...

  4. #4
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    Voilà comment faire un hook pour bloquer le clavier (de tous les programmes y compris le tiens):

    Création d'une DLL
    Crée une DLL. Je l'ai appelée hookdll.dll

    Code de la DLL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include <windows.h>
     
    extern "C" __declspec (dllexport) LRESULT __stdcall HookClavier(int nCode, WPARAM wParam, LPARAM lParam);
     
    #pragma argsused
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
            return 1;
    }
     
     
    LRESULT __stdcall HookClavier(int nCode, WPARAM wParam, LPARAM lParam)
    {
            return 1;
    }
    Utilisation de la DLL à l'endroit de ton choix dans ton programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    typedef LRESULT (__stdcall *HOOKCLAVIER) (int nCode, WPARAM wParam, LPARAM lParam);
     
        HINSTANCE hDLL;
        HOOKCLAVIER HookClavierProc;
     
        if ((hDLL=LoadLibrary("hookdll.dll")))
        {
            HookClavierProc = (HOOKCLAVIER) GetProcAddress(hDLL, "HookClavier");
            if (HookClavierProc)
            {
                SetWindowsHookEx(WH_KEYBOARD, HookClavierProc, hDLL, 0);
            } 
            FreeLibrary(hDLL);
        }

    Voilà, je viens de le tester et çà marche bien ;-).

    Cordialement.

    PS: il se peut que tu ai ce massage d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C++ Erreur]: E2342 Mauvaise correspondance de type dans le paramètre 'lpfn' ('int (__stdcall *)()' désiré, 'long (__stdcall *)(int,unsigned int,long)' obtenu)
    Si c'est le cas, je te dirai comment le résoudre.
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Ecoute je te remercie beaucoup, je test ca et je te tiens au courant...

    Le but maintenant c'est d'apprendre a creer une DLL mais ca je l'ai vu dans un tuto!

    Merci d'avance pour ta reponse!

  6. #6
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    Pour la DLL, je t'ai fourni tout le code, tu as juste à créer un projet "expert DLL", et remplacer tout le code par le mien ;-)

    Sinon, le tuto est là:
    http://lfe.developpez.com/DLL/

    A+
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Alors la chapeau bas cher monsieur!

    Du coup je te tiens au courant des ce soir pour tout ca!

    Merci encore!

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C++ Erreur] Unit1.cpp(30): E2034 Impossible de convertir 'long (__stdcall *)(int,unsigned int,long)' en 'int (__stdcall *)()'
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C++ Erreur] Unit1.cpp(30): E2342 Mauvaise correspondance de type dans le paramètre 'lpfn' ('int (__stdcall *)()' désiré, 'long (__stdcall *)(int,unsigned int,long)' obtenu)
    sont ici comme message d'erreur sur la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowsHookEx(WH_KEYBOARD, HookClavierProc, hDLL, 0);
    Un petit coup de pouce?...

    Au fait, quel est le moyen de reactiver le clavier apres?

  9. #9
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    Comme je l'avais prévu, tu as eu ces erreurs .

    Résolution
    Tape HOOKPROC n'importe où et clique dessus en laissant CTRL appuyé. Tu te retrouve sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef FARPROC HOOKPROC;
    Remplace la par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef long (__stdcall *HOOKPROC) (int, unsigned int, long);
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  10. #10
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    Désactiver le hook à un moment donné

    Tu dois disposer tout d'abord d'une variable HHOOK:
    Ensuite, tu récupère la valeur de retour de SetWindowsHookEx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hHook = SetWindowsHookEx(WH_KEYBOARD, HookClavierProc, hDLL, 0);
    Enfin, pour libérer le hook, tu appelle UnhookWindowsHookEx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnhookWindowsHookEx(hHook);
    Voilà
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut Tres grand remerciement
    Eh bien ecoute tout marche impecable si ce n'est pour arreter le HOOK.

    J'ai fait une declaration globale de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef LRESULT (__stdcall *HOOKCLAVIER) (int nCode, WPARAM wParam, LPARAM lParam);
     
        HINSTANCE hDLL;
        HOOKCLAVIER HookClavierProc;
    J'ai attribuer a un TButon le code contenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HHOOK hHook; //Declaration du HOOK
    hHook = SetWindowsHookEx(WH_KEYBOARD, HookClavierProc, hDLL, 0); //Scrute l etat du HOOK
    UnhookWindowsHookEx(hHook); //Libere le HOOK
    Cependant rien ne se fait lorsque je clique dessus. Par ailleurs il n'y a aucun retour de message d'erreur... Je ne pense pas que le problème soit important mais bon il me manque encore un petit truc!

    Sinon merci beaucoup pour m'avoir fourni tous ces renseignements se sont des personnes comme toi qui rendent ce genre de site des references pour la programmation informatique, longue vie aux developpeurs Builder et a Developpez!

  12. #12
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    je me suis mal fait comprendre. La ligne suivante ne doit pas être écrite à l'endroit où tu veux terminer le hook. Elle doit se trouver à l'endroit où tu as établit le hook. Mais voici le programme complet pour que tu comprenne ce que je veux dire (boutton 1 = activer le hook et bouton 2 = arreter le hook):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "hookcode.h"
     
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
     
    HHOOK hHook;
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        HINSTANCE hDLL;
        typedef LRESULT (__stdcall *HOOKCLAVIER) (int nCode, WPARAM wParam, LPARAM lParam);
        HOOKCLAVIER HookClavierProc;
        if ((hDLL=LoadLibrary("hookdll.dll")))
        {
            HookClavierProc = (HOOKCLAVIER) GetProcAddress(hDLL, "HookClavier");
            if (HookClavierProc)
            {
                hHook = SetWindowsHookEx(WH_KEYBOARD, HookClavierProc, hDLL, 0);
            }
            FreeLibrary(hDLL);
     
        }
    }
     
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
                UnhookWindowsHookEx(hHook);
    }
    En fait en appelant une nouvelle fois SetWindowsHookEx, tu avais installé un deuxième hook clavier ;-)
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Ce coup la on est bon... Tout marche impecable et en effet je n'avais pas compris ca comme ca.

    Merci beaucoup a toi pour tes aides qui m'ont ete si precieuses, et grace a toi le Fameux RESOLU peut etre appose devant le sujet du Post. Merci encore a toi.

    @ tres bientot.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Desactiver le clavier sur un formulaire
    Par yeah112 dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/05/2009, 14h10
  2. Peut on desactiver le mode debug ?
    Par majong dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/02/2008, 13h20
  3. Réponses: 16
    Dernier message: 23/11/2007, 01h01
  4. Desactiver le clavier sur submit
    Par Higestromm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 17/01/2006, 13h45
  5. désactiver raccourcis clavier / click
    Par allowen dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 19/08/2005, 19h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo