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 :

bloquer les clics souris


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut bloquer les clics souris
    Bonjour,

    je suis face à un epineux problèmes de hook.

    Je suis en train de créer un programme qui permettrait de créer un clavier virtuel mais afin de ne pas changer la fenetre active lorsque je clique dans la zone du clavier (sur un deuxième écran tactile en réalité).

    Bon, je vais copier le code de ma dll ci dessous.

    Comme vous le verrez, c'est msghook qui est appellé et qui est chargé de selectionner les clics gauche et de réaliser une selection sur le positionnement.

    De même. Dans cette fonction, on devrait normalement bloquer ou non les messages de la souris.

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    // MouseHook.cpp : Defines the entry point for the DLL application.
    //
    
    #include "stdafx.h"
    #define _COMPILING_44E531B1_14D3_11d5_A025_006067718D04
    #include "MouseHook.h"
    
    #pragma data_seg(".JOE")
    HWND hWndServer = NULL;
    //POINT position = {0,0};
    #pragma data_seg()
    #pragma comment(linker, "/section:.JOE,rws")
    
    HINSTANCE hInst;
    UINT UWM_MOUSEMOVE;
    HHOOK hook;
    static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam);
    
    BOOL APIENTRY DllMain( HINSTANCE hInstance, 
                           DWORD  Reason, 
                           LPVOID Reserved
    					 )
    {
     switch(Reason)
        { /* reason */
         case DLL_PROCESS_ATTACH:
    	hInst = hInstance;
    	UWM_MOUSEMOVE = RegisterWindowMessage(UWM_MOUSEMOVE_MSG);
    	return TRUE;
         case DLL_PROCESS_DETACH:
    	if(hWndServer != NULL)
    	   clearMyHook(hWndServer);
    	return TRUE;
        } /* reason */
        return TRUE;
    }
    
    
    /****************************************************************************
    *                                 setMyHook
    * Inputs:
    *       HWND hWnd: Window to notify
    * Result: BOOL
    *       TRUE if successful
    *	FALSE if error
    * Effect: 
    *       Sets the hook
    ****************************************************************************/
    
    __declspec(dllexport) BOOL setMyHook(HWND hWnd)
        {
         if(hWndServer != NULL)
    	return FALSE; // already hooked!
         hook = SetWindowsHookEx(WH_GETMESSAGE,
    			   (HOOKPROC)msghook,
    			    hInst,
    			    0);
         if(hook != NULL)
    	{ /* success */
    	 hWndServer = hWnd;
    	 return TRUE;
    	} /* success */
         return FALSE; // failed to set hook
        } // setMyHook
    
    /****************************************************************************
    *                                 clearMyHook
    * Inputs:
    *       HWND hWnd: Window hook
    * Result: BOOL
    *       TRUE if successful
    *	FALSE if error
    * Effect: 
    *       Removes the hook that has been set
    ****************************************************************************/
    
    __declspec(dllexport) BOOL clearMyHook(HWND hWnd)
        {
         if(hWnd != hWndServer || hWnd == NULL)
    	return FALSE;
         BOOL unhooked = UnhookWindowsHookEx(hook);
         if(unhooked)
    	hWndServer = NULL;
         return unhooked;
        } // clearMyHook
    
    /****************************************************************************
    *                                   msghook
    * Inputs:
    *       int nCode: Code value
    *	WPARAM wParam:
    *	LPARAM lParam:
    * Result: LRESULT
    *       Either 0 or the result of CallNextHookEx
    * Effect: 
    *       Hook processing function. If the message is a mouse-move message,
    *	posts the coordinates to the parent window
    ****************************************************************************/
    
    static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam)
        {
         if(nCode < 0)
    	{ /* pass it on */
    		 CallNextHookEx(hook, nCode, wParam, lParam);
    	 return 0;
    	 } /* pass it on */
    	 POINT pos;
       LPMSG msg = (LPMSG)lParam;
       if(msg->message == WM_LBUTTONDOWN)
    				{
    					GetCursorPos(&pos);
    					if (pos.x<500) 
    					{
    					 PostMessage(hWndServer, UWM_MOUSEMOVE, 0, 0);
    					 return 1;
    					}
    				}
    	
      return CallNextHookEx(hook, nCode, wParam, lParam);
        } // msghook
    J'envoie un message au programme principal avec postmessage lorsque le clic doit etre considéré mais d'après ce que j'ai vu en cherchant ca et là, il devrait suffire de retourner 0 ou 1 pour bloquer le signal souris en ne le renvoyant pas avec CallNextHookEx.

    Merci d'avance, je suis près à plus vous renseigner.

    vincent

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut peut
    je me demande si ce n'est pas l'utilisation de WH_GETMESSAGE à la place de WH_MOUSE qui fait foiré...

    c'est peut etre en dessous dans la pile.

    vincent

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    impossible, c'est toujours quand on poste qu'on trouve la réponse.

    j'ai remplacé le WH_GETMESSAGE par WH_MOUSE.

    Après, j'ai commenté la partie où je cast en lpmsg.

    ce qui donne

    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
    static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam)
        {
         if(nCode < 0)
    	{ /* pass it on */
    		 CallNextHookEx(hook, nCode, wParam, lParam);
    	 return 0;
    	 } /* pass it on */
    //	  LPARAM lParam2;
    	 
    //	 lParam2 = lParam;
    	 POINT pos;
      // LPMSG msg = (LPMSG)lParam;
      if(wParam == WM_LBUTTONDOWN)
    				{
    					GetCursorPos(&pos);
    					if (pos.x<500) 
    					{
    					 PostMessage(hWndServer, UWM_MOUSEMOVE, 0, 0);
    					 return 1;
    					}
    				}
    	
      return CallNextHookEx(hook, nCode, wParam, lParam);
        } // msghook
    Par contre, j'ai un autre problème plus embettant. Quand je recupere le click, il ne selectionne pas de nouvelle fenetre mais il deselectionne la fenetre active ce qui est très problématique.

    que faire ?

    vincent

Discussions similaires

  1. Chargement ListView bloquer les clics
    Par manticore dans le forum Composants graphiques
    Réponses: 9
    Dernier message: 27/03/2013, 22h31
  2. Réponses: 1
    Dernier message: 13/05/2007, 15h34
  3. Est-il possible de bloquer le clic-droit de la souris?
    Par Jahprend dans le forum Windows
    Réponses: 1
    Dernier message: 09/06/2006, 12h56
  4. Bloquer les clics sur une fenêtre
    Par Enzololo dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 22/05/2006, 22h12
  5. [FLASH 8] Retrouver les clip sous un clic souris
    Par wwave dans le forum Flash
    Réponses: 4
    Dernier message: 17/11/2005, 13h52

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