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 :

Evenement clavier


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut Evenement clavier
    Bonjour,
    j'ai une application qui réagit en fonction de l'appui des touches du clavier.
    Ceci fonctionne mais seulement lorsque mon application est sélectionnée ( fenêtre de l'application activée en fait).
    Est-il possible de gérer les événements clavier alors qu'une autre fenêtre est sélectionnée ?
    Exemple : je joue à un jeu vidéo, j'appuie sur la touche que j'ai associé à mon appli et celle-ci exécute la fonction correspondante.

    Merci par avance.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Alors si c'est un jeu DirectX oublie de suite, ce n'est pas possible sauf à réécrire un driver clavier (j'avais essayé).

    Sinon renseigne toi sur les HOOK Clavier ( est ton ami).

    Bon courage.

  3. #3
    Membre expérimenté Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Par défaut
    je pense que tu peux faire ca avec un thread.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Citation Envoyé par damienlann
    je pense que tu peux faire ca avec un thread.
    Alors là je voudrais bien savoir comment !

  5. #5
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    Je sais que ce que je veux faire est possible puisque TeamSpeak le fait. Par exemple, pour activer le micro on a le choix d'appuyer sur une touche du clavier et ce, même si on est dans une autre application.

    M'a l'air compliqué le hook...

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    A mon avis seul le Hook te permet de faire ça...

  7. #7
    Membre expérimenté Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Par défaut
    Citation Envoyé par Neilos
    Citation Envoyé par damienlann
    je pense que tu peux faire ca avec un thread.
    Alors là je voudrais bien savoir comment !
    nan?
    ben moi je serai partis là dessus... tant pis

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    C'est bien beau un thread mais tu veux lui faire faire quoi ?

  9. #9
    Membre expérimenté Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Par défaut
    nan mais je me trompe peut-etre. Moi dans ma premiere idée je serais parti vers un thread.

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Oui d'accord mais je me demande ce que tu comptais lui faire faire à ton thread ?

  11. #11
    Membre averti

    Inscrit en
    Août 2002
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 24
    Par défaut
    J'ai une solution que j'avais trouvé sur developpez mais je sais plus ou exactement ... enfin ... bref ça t'évitera de te créer un hook trop compliquer. Surtout si tu veux intercepter juste une ou pas trop de touches.

    Voici un exemple de l'utilisation (très simple d'integration dans un code existant). Ici, à chaque appui sur la touche A, quelque soit la fenêtre dans laquelle tu te trouves, le cpt va monter d'un crant.

    Pour l'exemple, tu crées une form(Form1) avec un label(Label1). Tout ce qui est en gras est à ajouter. Comme tu pourras le constater ya pas grand chose.

    Unit1.cpp
    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
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "StrGrid.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int cpt=0;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
        RegisterHotKey(Handle, 'A', 0 , 'A');
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
        UnregisterHotKey (Handle, 'A');
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::WMHotKey(TMessage & Msg)
    {
        if (Msg.WParam == 'A')
        {
            Label1->Caption = cpt++;
        }
    }
    
    //---------------------------------------------------------------------------
    Unit1.h
    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
    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Grids.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // Composants gérés par l'EDI
        TLabel *Label1;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall FormDestroy(TObject *Sender);
    private:    // Déclarations de l'utilisateur
    public:        // Déclarations de l'utilisateur
        __fastcall TForm1(TComponent* Owner);
        void __fastcall WMHotKey(TMessage & Msg);
    
    protected:
        BEGIN_MESSAGE_MAP
            VCL_MESSAGE_HANDLER(WM_HOTKEY, TMessage, WMHotKey)
        END_MESSAGE_MAP(TForm)
    };
    
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    En esperant que ça serve à plus d'un.
    Voili voilà

    A+

  12. #12
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Sinon je rappelle que dans la page Sources BCB, il y a un exemple de hook clavier et souris déjà tout fait. Il restera juste à personnaliser une ou deux fonctions pour intercepter les bonnes séquences de touches.

  13. #13
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    Merci all, je devrais trouver mon bonheur

  14. #14
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    2 ptits choses encore :
    - J'ai un avertissement à la compilation avec le code de MiGon: "W8027 Les fonctions contenant switch ne sont pas développées inline".
    - Pourquoi je dois appuyer 2 fois sur la touche A au départ pour voir la valeur 1 apparaître sur le label ?? Ca fait la même chose lorsque on change de touche pour décrementer par exemple, au départ il faut appuyer 2 fois pour que ça décremente après ça marche normalement.

    Voilà vite fait ce que ça fait (algorithme à 2€ ) :

    cpt = 0

    Appui sur A --> cpt = 0
    Appui sur A --> cpt = 1
    Appui sur A --> cpt = 2

    Appui sur B --> cpt = 3
    Appui sur B --> cpt = 2
    Appui sur B --> cpt = 1
    Appui sur B --> cpt = 0

    Appui sur A --> cpt = -1
    Appui sur A --> cpt = 0

    Bizarre !

    A part ça, j'arrive à faire ce que je voulais ! Merci beaucoup

  15. #15
    Membre averti

    Inscrit en
    Août 2002
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 24
    Par défaut
    Hello Reven777,

    Pour ce qui est d'appuié 2 fois sur la touche A pour voir le 1, je présume que ton label est initialisé avec un Caption "0". Donc au lieux de faire un cpt++, tu fais un ++cpt et le tour est joué.
    Un ptit --cpt à la place de ton cpt-- et tu seras 2 fois plus content


    Concernant ton histoire de warning, je vois pas trop car dans le code que j'ai filé, j'utilise pas de switch.

    En espérant t'avoir aidé

    A+

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

Discussions similaires

  1. [param undef][evenement clavier][2param fonction]
    Par tyrann dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/02/2006, 11h40
  2. [c#] Evenements clavier sur listview
    Par mikyfpc dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/11/2005, 12h35
  3. Evenement clavier sur toute l'interface
    Par Guybrush dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 08/02/2005, 12h13
  4. Problème evenement clavier sous fire fox.
    Par fxp17 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/01/2005, 15h59
  5. Ecouter les evenements clavier et souris
    Par init dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 24/11/2004, 20h02

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