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 :

hook clavier vs touches système WINDOWS


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2002
    Messages : 16
    Points : 22
    Points
    22
    Par défaut hook clavier vs touches système WINDOWS
    bonjour tous,

    le sujet a déjà été traité maintes fois, mais je dois dire qu'après avoir écumé tous les posts sur ce sujet, je n'ai toujours pas trouvé de solution à mon problème:

    je tourne sous XP, j'ai écrit un hook clavier histoire de "verouiller" le clavier, mais je n'arrive toujours pas à bloquer les touches WIN et Ctrl+Esc et Alt+Tab (alors que les autres touches sont bien bloquées), bien que d'après le code, tout évènement clavier devrait passer à la trappe; voici le code de mon 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <windows.h>
    #pragma hdrstop
     
    // Exported functions
    extern "C" __declspec(dllexport)bool InstallKeybHook();
    extern "C" __declspec(dllexport)bool RemoveKeybHook();
    extern "C" __declspec(dllexport)bool InstallMousHook();
    extern "C" __declspec(dllexport)bool RemoveMousHook();
     
    // Declarations
    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
    LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
     
    // Global variables
    HHOOK KeybHookHandle,MousHookHandle;
    HINSTANCE DllInstance;
     
    //---------------------------------------------------------------------------
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
    {
      DllInstance=hinst;
      return 1;
    }
    //---------------------------------------------------------------------------
     
    bool InstallKeybHook()
    {
      KeybHookHandle=SetWindowsHookEx(WH_KEYBOARD,
          reinterpret_cast<HOOKPROC>(KeyboardProc),DllInstance,0);
      if (KeybHookHandle==NULL) return false;
       else return true;
    }
    //---------------------------------------------------------------------------
     
    bool RemoveKeybHook()
    {
      if(UnhookWindowsHookEx(KeybHookHandle)==0) return false;
       else return true;
    }
    //---------------------------------------------------------------------------
     
    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
      return -1;
     
    /*  if (nCode<0) return CallNextHookEx(KeybHookHandle,nCode,wParam,lParam);
      return 80;*/
    }
    //---------------------------------------------------------------------------
     
    bool InstallMousHook()
    {
      MousHookHandle=SetWindowsHookEx(WH_MOUSE,
          reinterpret_cast<HOOKPROC>(MouseProc),DllInstance,0);
      if (MousHookHandle==NULL) return false;
       else return true;
    }
    //---------------------------------------------------------------------------
     
    bool RemoveMousHook()
    {
      if(UnhookWindowsHookEx(MousHookHandle)==0) return false;
       else return true;
    }
    //---------------------------------------------------------------------------
     
    LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
      return -1;
     
    /*  if (nCode<0) return CallNextHookEx(MousHookHandle,nCode,wParam,lParam);
      return 80;*/
    }
    //---------------------------------------------------------------------------
    j'ai le même souci avec la souris, qui en théorie ne devrait pas bouger ni générer d'évènements lors de clicks..

    ce que je remarque, est que l'évènement (spécialement le WIN) est traité par mon hook, mais c'est comme s'il était traité une seconde fois par le système, alors que logiquement mon hook empêche le passage de l'évènement à d'autres process...can someone help please ?

  2. #2
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut konfo
    Regarde ce lien ce n'est pas un hook mais peut etre que cela va t'aider

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2002
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    salut blondelle,

    merci pour le lien, mais ce n'est pas exactement ce que je recherche...

    je donne plus de détails sur mon appli: g une appli serveur qui contrôle à distance les PC (genre cyberespace), et une autre appli client qui elle bloque ou débloque le PC (clavier + souris) suivant l'ordre reçu de l'appli serveur..
    c cette dernière qui fonctionne avec hook clavier et souris (DLL): pour mon développement, j'utilise l'appli client (hooked) sous XP dans une machine virtuelle VMWARE, et il se passe comme si l'évènement est bloqué par mon appli, puis récupéré par le système pour être traité normalement, je parle en particulier des touches système WIN et Ctrl+Esc et Alt+Tab...

    de même pour la souris, mon hook devrait en théorie donner un curseur souris "freeze", mais celui-ci bouge normalement, et le click fait changer le focus, donc click souris traité par le système...

    je v quand même faire un test sans le VMWARE, may be c lui qui fait le double traitement, et je verrais...

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Il y' a quelque temps, je cherchais la meme chose que toi et pour la meme raison. Et j' ai trouvé une solution, la voilà :
    http://www.developpez.net/forums/d57...-hook-clavier/

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2002
    Messages : 16
    Points : 22
    Points
    22
    Par défaut

    ok, alors si g bien suivi (corrigez moi si je me goure):
    - à l'appui sur une touche, le système envoie message à mon appli, qui lui en retourne un autre, et dans mon cas c ce qui fait que la touche clavier est retraitée par le système
    - mon hook n'est pas un low level
    - je dois intégrer à mon appli la fonction WndProc, en évitant le DefWndProc, pour empêcher que le système ne retraite le message (voir point 1)

    c bien ça ?

    alors ma question maintenant est: comment rendre mon hook en low level ?

    et tout bout de code serait le bienvenu...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2002
    Messages : 16
    Points : 22
    Points
    22
    Par défaut [Résolu] hook clavier vs touches système WINDOWS


    g finalement pu résoudre mon problème, maintenant mes deux hooks clavier et souris fonctionnent à merveille en low level: je les ai un peu gribouillé en m'inspirant d'un projet en source que g déniché (sur ce forum je crois, m rapl pa !!!), mais que g dû d'abord convertir en C++ Builder..

    pour ceux que ça intéresserait, le projet converti en Builder...

    merci à tous quand même...
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [Win32 API] Hook clavier combinaison de touches
    Par Trunks dans le forum Windows
    Réponses: 3
    Dernier message: 27/11/2010, 13h23
  2. Réponses: 1
    Dernier message: 02/09/2009, 14h37
  3. Réponses: 1
    Dernier message: 09/04/2009, 09h45
  4. Clavier sans touche "Windows"
    Par sango85 dans le forum Windows 2000/Me/98/95
    Réponses: 8
    Dernier message: 17/06/2007, 13h59
  5. Hook Clavier et changement de touche
    Par Fly_57 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 09/08/2004, 19h42

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