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 :

Intercepter les touches du clavier


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Intercepter les touches du clavier
    comment on peut intercepter les caracteres taper sur clavier sans que le
    focus soit a votre application. merci de me repondre vite

  2. #2
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut, il faut que tu fasses un hook clavier. Tu as des exemples sur le site de hook clavier et souris.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 31
    Points : 33
    Points
    33
    Par défaut
    j'ai une question qui va assez vien avec ce sujet.

    Je voudrai que (La Form a le focus) quand l'utilisateur apuis sur la touche Esc le programme effectue une action.

    Comment est ce que je peut faire ceci?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Tu peux t'inspirer du code suivant (que j'utilise dans une de mes appli):

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    // dans ton fichier projet:
    HINSTANCE hinst;
    WINAPI WinMain(HINSTANCE h, HINSTANCE,LPSTR,int)
    {
      hinst = h;
      ...
     
    // dans ta fiche principale:
     
    #include <winuser.h>
    HHOOK OldHook;
    FARPROC PFiltre;
    extern HINSTANCE hinst;
     
    	// fonction de filtre des messages clavier
    LRESULT CALLBACK _export Filtre(int nCode, WPARAM wParam, LPARAM lParam)
    {
      MSG *mes = (MSG *) lParam;
      BOOL nexthook = TRUE;
     
     
      if (mes->message == WM_KEYDOWN || mes->message == WM_SYSKEYDOWN)
      {
        UINT tch;
     
        switch(tch = mes->wParam)
        {
          	case VK_ESCAPE: 
                   nexthook = false; 
                   ...
                   break;
        }
      }
      return nexthook ? CallNextHookEx(OldHook,nCode,wParam,lParam) : 0;
    }
     
    // et tu mets quelque part, après l'initialisation de ton appli (moi je l'ai mis sur
    // le FormKeyDown car on entre dans mon appli après l'appui sur une touche:
              // already_done, booléen initialisé à false dans le constructeur
            if (!already_done)
            {
    		// installe un filtre pour capter l'appui sur les touches
    	        PFiltre = MakeProcInstance((FARPROC) Filtre,hinst);
     
    	        if (PFiltre != 0)
    	        {
    #ifdef __FLAT__
    		        OldHook = SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC) PFiltre,
          	                        hinst,GetCurrentThreadId());
    #else
    		        OldHook = SetWindowsHook(WH_GETMESSAGE,(HOOKPROC) PFiltre);
    #endif
    	        }
                        already_done = true;
            }

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Gecko753, il te suffit de coder la fonction OnKeyPress ou OnKeyDown de ta form
    dedans tu teste la touche frappé Si c'est Echap, tu effectue ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // Méthode déclancher lorsque l'on relache une touche du clavier
    void __fastcall TAForm::OnKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
          // Si la touche est Suppr
          if(Key == VK_ESCAPE)
          {
                 // Ton code ici
          }
    }
    Mais poste plutôt dans un nouveau message la prochaine fois car même si ta question traite aussi du clavier, elle est différente.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Effectivement, la méthode de kurul1 est plus adaptée au problème de Gecko que ma solution. J'étais focalisé sur la question de filtre clavier, mais si la seule touche à capter est ESCAPE, il n'y a pas besoin de passer par un filtre !

  7. #7
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Par contre pour la question de yacscream, cela ne marche pas étant donné que ca form n'a pas le focus. Là, ta solution est plus adapté joss95, mais je n'y connait rien en hook.

  8. #8
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Une solution plus simple serait de faire le test suivant dans un Timer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if((GetAsyncKeyState(VK_ESCAPE) & 0x8000) != 0)
    {
          //code
          ...
    }
    cela test si la touche ESC est enfoncée.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 31
    Points : 33
    Points
    33
    Par défaut
    ok merci a tous. J'ai trouvé plusieurs réponse que je vais essayer.

    C'est sympa de voir que l'on peut compter sur les autres

Discussions similaires

  1. Intercepter les touches du clavier
    Par boby62423 dans le forum ActionScript 3
    Réponses: 6
    Dernier message: 17/07/2009, 22h38
  2. Intercepter les touches clavier sur la fiche
    Par Bourak dans le forum Langage
    Réponses: 3
    Dernier message: 14/01/2008, 15h33
  3. [C#2.0] Intercepter les touches du clavier
    Par iowa dans le forum Windows Forms
    Réponses: 10
    Dernier message: 28/04/2006, 11h42

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