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 :

Clavier visuel. Comment ça marche ?


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut Clavier visuel. Comment ça marche ?
    Bonjour à tous,

    J'ai besoin d'aide pour réaliser un clavier virtuel dans le genre du "clavier visuel windows". A priori, il suffit de réaliser une application fenêtre qui envoie des codes de touches à une autre application lorsque l'on clique sur elle.
    Mais le problème est que, lorsque l'on clique sur le clavier, l'autre application pert naturellement le focus.
    Comment faut-il donc faire pour laisser le focus sur l'application qui avait le focus avant l'"activation" du clavier?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Comment retrouver le handle d'une fenêtre qui avait le focus immédiatement avant l'activation de la nouvelle fenêtre?

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut engrobel
    A l'aide d'un utilitaire comme Spy++ par exemple, on peut recuperer le nom d'une fenetre donc sont Handle a l'aide " FindWindow "
    Un exemple apres avoir ouvert Excel j'ai besoin de recuperer le Handle de la fenetre puis de la barre de commande je fais comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     // ici le fichier Excel est charge
     // on va recuperer le Handle de la fenetre ainsi que celui de la barre de menus
    HWND h = FindWindow("XLMAIN", NULL);
    HWND h1 = FindWindowEx(h, NULL, "EXCEL2", NULL);
    HWND h2 = FindWindowEx(h1, NULL, "MsoCommandBar", "Barre de menus Feuille de calcul");
     // on selectionne la Barre de menus
    .....

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Bonjour blondelle,

    Pour utiliser FindWindow il faut connaitre le nom ou la classe de la fenêtre. Celle-ci n'est a priori pas connue de l'application clavier. Tout ce qui est connu c'est que la fenêtre avait le focus juste avant! Windows doit stocker dans une pile la liste des fenêtres activées mais je ne connais par la fonction qui permet d'y accéder!

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Pour connaitre le nom il faut utiliser soit Spy++ de Visual C++ soit WinSight32 de BCB

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Citation Envoyé par blondelle Voir le message
    Pour connaitre le nom il faut utiliser soit Spy++ de Visual C++ soit WinSight32 de BCB
    Donc ... on devrait pouvoir faire la même chose qu'eux !

    On peut s'amuser à faire ceci (c'est juste un début ...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    HWND hDeskTop;
    HWND hWindow;
    char Buffer[1024]; // <<... ça devrait aller !!!
    Je vais faire écho de tout ce que je trouve dans un memo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Memo1->Clear();
    hDeskTop = GetDesktopWindow();
    hWindow  = GetTopWindow(hDeskTop);
    while(hWindow != NULL)
        {
        if(IsWindow(hWindow))
            {
            GetClassName(hWindow, Buffer, 1024);
            //Donc ici on tient le nom de la classe
            Memo1->Lines->Add(Buffer);
            }
        hWindow = GetNextWindow(hWindow, GW_HWNDNEXT);
        }
    Ma foi ... après ... ???

    A plus !

Discussions similaires

  1. Comment faire un clavier visuel?
    Par Ludo_360 dans le forum Delphi
    Réponses: 12
    Dernier message: 02/05/2007, 15h03
  2. Comment afficher le clavier visuel ?
    Par crossrobotik dans le forum MFC
    Réponses: 1
    Dernier message: 30/01/2007, 14h38
  3. [SYNEDIT] -> Comment ça marche ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 19h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/08/2003, 00h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2003, 12h51

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