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 :

pb hook


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 117
    Points : 35
    Points
    35
    Par défaut pb hook
    salut

    voila j'ai installer un hook qui intercepte tout les messages et je voudrais maintenant que tout ces messages aucune autre application ne puisse y avoir accès. en fait il faudrait que je les supprime de la queue dans le callback .

    voila comment j'ai installé le hook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc, moduleCourant, 0);
    et voila le callback

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LRESULT CALLBACK GetMsgProc (int code,WPARAM wParam,LPARAM lParam)
    {
    	if(code >= 0) 
    	{
    	}
    	return CallNextHookEx(hookClavier, code, wParam, lParam);
    }
    merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je ne sais pas si c'est faisable de le retirer complèrement, mais tu peux en faire un WM_NULL:
    Citation Envoyé par MSDN
    For example, if an application has installed a WH_GETMESSAGE hook and wants to prevent a message from being processed, the GetMsgProc callback function can change the message number to WM_NULL so the recipient will ignore it.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 117
    Points : 35
    Points
    35
    Par défaut
    merci Médinoc sa donne en gros se que je voulais faire

    mais il reste un pb déjà au niveau de la souris : elle bouge tjs. es-ce que sa veut dire que le deplacement de la souris n'est pas gérer par des message ?
    sinon sa ne bloque pas les raccourci genre Alt+Tab ou Ctrl+Alt+Supp. es-ce qu'il y à qq chose de spécial à faire pour les bloquer ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je ne sais pas exactement ce que tu cherches à bloquer ni pourquoi, mais non, la souris n'est pas gérée par des messages. Par contre, les fenêtres ne reçoivent pas les messages générés quand la souris se déplace au-dessus d'elles.

    Si tu tiens à bloquer complètement un PC, je te conseille plutôt de faire tourner un processus en priorité Real-Time, un processus qui ferait une boucle d'attente active pour tester par exemple l'état du clavier avec GetAsyncKeyState()...
    Mais je ne sais pas si le PC sera encore en état de transmettre les infos du clavier vers ton processus...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 117
    Points : 35
    Points
    35
    Par défaut
    en fait c'est presque sa, je cherche à tout bloquer sur le pc sauf la touche entré
    ton idée est bien mais comment je pourrai faire pour definir un prog en priorité real-time ?

    sinon j'ai encore un pb avec le hook enfin la dll. Pour detecter l'appuis de la touche entré j'ai fais une fonction qui renvoie un bool déclarer au début de la dll. je met se bool à true quand je detecte un appuis sur entré dans le callback mais la fonction renvoie tjs false quand je l'appel dans le programme . pourquoi sa ne marche pas ?
    j'ai vérifié si ce n'était pas la détection de la touche entré qui foirait mais sa marche, donc c'est le bool qui à un pb.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    J'ai eu ce genre de problème dans le temps.
    Essaie de déclarer le bool et la fonction avec le modifieur "volatile"...

    Pour monter en priorité haute, il faut le privilège SE_INC_BASE_PRIORITY_NAME.

    Si l'user qui exécute le programme est un admin, tu dois pouvoir l'obtenir sans problème avec AdjustTokenPrivileges() et les fonctions qui vont avec. Sinon, ça risque d'être plus dur.
    Pour changer la priorité, regarde SetPriorityClass() et SetThreadPriority (il te faut les deux pour avoir la priorité absolue ou presque)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 117
    Points : 35
    Points
    35
    Par défaut
    euh ... sa marche pas, quand je rajoute 'volatile' sa ne change rien

    voila la fonction qui renvoie le bool

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    extern "C" volatile bool __stdcall Fin ()
    {
    return fin;
    }
    je déclare la variable comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    volatile bool fin=false;
    et voila comment je déclare tout sa dans le programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #pragma comment (lib,"raccourcis.lib")
    
    extern "C"
    {
    	int __stdcall  InstalleLeHookClavier();
    	bool __stdcall Fin ();
    	void __stdcall ArreteLeHookClavier();
    }
    une idée ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    1) mets en volatile aussi dans le header
    2) Je vois pas trop pourquoi ça ne marche pas si le booléen est bien modifié... Sinon, tu peux peut-être essayer avec un Event...

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Mat 74
    mais il reste un pb déjà au niveau de la souris : elle bouge tjs. es-ce que sa veut dire que le deplacement de la souris n'est pas gérer par des message ?
    La souris, en bougeant, informe les fenêtres qu'elle a bougé via des messages. Un hook te permet d'intercepter ces messages, et donc de priver les fenêtres de l'information "la souris a bougé". Mais le déplacement de la souris, c'est l'OS qui le gère. Idem le clavier.

    sinon sa ne bloque pas les raccourci genre Alt+Tab ou Ctrl+Alt+Supp. es-ce qu'il y à qq chose de spécial à faire pour les bloquer ?
    Tu peux désactiver Alt+Tab en enregistrant ton propre hotkey, ou bien en créant un hook clavier bas niveau (LowLevelKeyboardProc). Tu ne peux pas désactiver CTRL+ALT+SUPPR via un simple programme. Il te faut remplacer msgina.dll:
    http://msdn.microsoft.com/msdnmag/issues/02/09/CQA/

Discussions similaires

  1. [HOOK] Problème(s) pour réaliser le tutoriel sur les HOOKS
    Par Rodrigue dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/07/2016, 18h22
  2. Hook + touche <Windows>
    Par MadChris dans le forum MFC
    Réponses: 9
    Dernier message: 21/10/2004, 11h14
  3. 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
  4. [Hook] Clavier Microsoft office keyboard
    Par merzhin dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 01/06/2004, 13h59
  5. touche pour accéder à une application : hook system?
    Par Fox_magic dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/01/2003, 00h02

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