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

Windows Discussion :

[C] Problème pour vider un buffer clavier


Sujet :

Windows

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut [C] Problème pour vider un buffer clavier
    Bonsoir à tous ,

    Voici mon problème :

    J'ai réaliser un hook clavier à l'aide du tuto proposé sur ce site, il fonction d'ailleurs très bien. Je souhaiterais maintenant vider mon buffer clavier afin de ne pas affiché le caractère tappé sous un éditeur de texte par exemple. J'ai essaillé de vider le buffer clavier à divers endroit dans mes process mais sans succès . J'utilise un .exe qui est un projet Win32 pour lancer ma DLL qui est le hook clavier.

    Voici les fonctions utilisées pour vider mon clavier :

    LRESULT CALLBACK KeybdProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    int c;
    while( (c=getchar())!='\n' && c!=EOF );
    ...
    ou fflush(stdin) ...
    }
    Mais sa ne marche pas... je rentre bien dans cette parti du programme avant d'écrire le caractère tappé sous 'NotePad'. Si quelqu'un peut m'aider . Merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Euh...
    Pourquoi mélanges-tu les hooks clavier avec LE BUFFER D'UNE CONSOLE ?

    Quand le hook clavier est appelé, soit il n'y a pas de console du tout dans le process, soit le message n'est même pas encore arrivé jusqu'à la console...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Euh...
    Pourquoi mélanges-tu les hooks clavier avec LE BUFFER D'UNE CONSOLE ?

    Quand le hook clavier est appelé, soit il n'y a pas de console du tout dans le process, soit le message n'est même pas encore arrivé jusqu'à la console...
    Tout d'abord merci pour t'as réponse, qui vient de m'aider à comprendre mon erreur (confusion entre buffer clavier et buffer d'une console).

    Comment puis-je faire alors pour supprimer un caractère tappé ?
    Il me semble qu'il est possible de détourné l'interruption clavier, mais c'est assez complexe sous XP ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Ben déjà, regarde dans l'aide des hooks si c'est possible d'intercepter la frappe...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ben déjà, regarde dans l'aide des hooks si c'est possible d'intercepter la frappe...
    Sauf erreur de ma part: "Intercepter la frappe" je le fais dans mon hook. Ce que je ne sais pas faire c'est "la modifier".

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut
    Citation Envoyé par mickael777 Voir le message
    Sauf erreur de ma part: "Intercepter la frappe" je le fais dans mon hook. Ce que je ne sais pas faire c'est "la modifier".
    Effectivement il y a erreur de ma part , car "un hook est un moyen de contrôler ce qui transite par le système de gestion de messages de Windows".
    Mais je ne sais toujours pas comment trifouillé dans mon buffer clavier windows.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut

    Quelqu'un serait-il ou je pourrait trouver de la doc. sur la partie de l'API windows traitant de la gestion clavier ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut
    J'ai finalement trouvé . Ce n'était pas pas très compliqué . Pour ce que sa intéresse la solution consite à déplacer le message clavier dans la fonction gérant le hook clavier avec "PeekMessage" (Passer le handel de l'application qui a le focus).

    Voici le code dans le hook clavier :
    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
    LRESULT CALLBACK KeybdProc(int nCode,WPARAM wParam,LPARAM lParam)    
    {
            MSG msg;
    	LPMSG lpMsg = &msg;
    
    	hFore = GetForegroundWindow();	// Donne le handel de l'application qui a le focus
    	PeekMessage(lpMsg,hFore,NULL,NULL,PM_REMOVE); 
    
     if (nCode == HC_ACTION)      
     {
    	switch (wParam)
    	{... Traitement du message}
     }
    
     return CallNextHookEx(VueDonnees->KeybdHookHandle,nCode,wParam,lParam); 
    }

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

Discussions similaires

  1. Problème pour récupérer l'entrée clavier
    Par Titi41 dans le forum Débuter
    Réponses: 9
    Dernier message: 09/11/2008, 19h19
  2. vider le buffer clavier
    Par josmiley dans le forum Général Python
    Réponses: 2
    Dernier message: 09/08/2007, 16h11
  3. problème pour vider un formulaire
    Par jomannix dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 26/06/2007, 15h16
  4. vider le buffer clavier
    Par Pragmateek dans le forum C
    Réponses: 31
    Dernier message: 20/06/2006, 21h33

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