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 :

Intercepter click droit toutes applications


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 123
    Points : 85
    Points
    85
    Par défaut Intercepter click droit toutes applications
    Bonjour,

    Je cherche à intercepter l'évènement click droit de la souris (dans une session TSE) afin d'en bloquer les effets avant que cet évènement soit transmis aux applications (dans le but de le désactiver pour une application en particulier)

    Je sais qu'il y a une clé que l'on peut ajouter en base des registres, mais cela n'agit que sur le bureau de windows, et est sans effet sur les applications

    Comment procéder ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben, tu peux essayer avec un hook global, ou peut-être qu'il est possible de ne hooker que l'application elle-même...
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    En lisant la réponse, je me suis dit : "j'ai rien compris"
    Mais cela m'a donné de nouveaux mots clés à utiliser : global hook

    Entre autres, l'article : http://support.microsoft.com/kb/318804/en-us

    Et finalement, je pense que je devrais m'en sortir ...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 123
    Points : 85
    Points
    85
    Par défaut global hook WM_MOUSE_LL
    Pour ceux que cela pourrait intéresser.

    Fichier stdafx.h modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #pragma once
    
    #define WIN32_LEAN_AND_MEAN		// Exclure les en-têtes Windows rarement utilisés
    // Fichiers d'en-tête Windows*:
    #include <windows.h>
    #include <winuser.h>

    Fichier system-wide hook.h modifié :
    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
    #define EXPORT __declspec(dllexport)
    
    // hook de bas niveau clavier - winuser.h
    #if undef WH_KEYBOARD_LL
    	#define WH_KEYBOARD_LL     13
    	#define LLKHF_ALTDOWN        (KF_ALTDOWN >> 8)
    	#define LLKHF_EXTENDED       (KF_EXTENDED >> 8)
    #endif
    
    // hook de bas niveau souris - winuser.h
    #if undef WH_MOUSE_LL
    	#define WH_MOUSE_LL        14
    	#define WM_LBUTTONDOWN		0x0201
    	#define WM_LBUTTONUP		0x0202
    	#define WM_MOUSEMOV		0x0200
    	#define WM_MOUSEWHEEL		0x020A
    	#define WM_RBUTTONDOWN		0x0204
    	#define WM_RBUTTONUP		0x0205
    #endif
    
    
    // http://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Hooks/HookReference/HookStructures/KBDLLHOOKSTRUCT.asp
    // Structures utilisées pour hooker le clavier - windows.h
    #if undef KBDLLHOOKSTRUCT 
    	typedef struct {
    		DWORD vkCode;
    		DWORD scanCode;
    		DWORD flags;
    		DWORD time;
    		ULONG_PTR dwExtraInfo;
    	} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
    #endif
    
    // Structures utilisées pour hooker la souris - windows.h
    #if undef MOUSEHOOKSTRUCT
    	typedef struct {
    		POINT pt;
    		HWND hwnd;
    		UINT wHitTestCode;
    		ULONG_PTR dwExtraInfo;
    	} MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT;
    #endif
    
    EXPORT BOOL __stdcall InstallHook(HWND hWnd);
    EXPORT BOOL __stdcall UninstallHook(HWND hWnd);
    LRESULT CALLBACK MessageProc (int nCode, WPARAM wParam, LPARAM lParam);
    fichier system-wide hook.cpp modifié
    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
    
    #include "stdafx.h"
    #include "System-wide hook.h"
    
    HINSTANCE handleInstance;
    HHOOK handleHook;
    HWND handleWnd = NULL;
    
    
    BOOL APIENTRY DllMain( HINSTANCE hInstance, DWORD  ul_reason_for_call, LPVOID lpReserved ) {
    	switch (ul_reason_for_call) {
    	case DLL_PROCESS_ATTACH:
    		// nécessaire pour l'installation du hook
    		handleInstance = hInstance;		
    		return TRUE;
    	case DLL_PROCESS_DETACH:
    		// appel de la désinstallation du hook
    		if(handleWnd != NULL)
    			UninstallHook(handleWnd);
    		return TRUE;
    	}
        return TRUE;
    }
    
    // ***************************************
    // Fonction pour l'installation du Hook
    // ***************************************
    BOOL __stdcall InstallHook(HWND hWnd) {
    	// On vérifie si le hook est déjà installé
    	if (handleWnd != NULL) return FALSE; 
    
    	// tentative d'installation du hook
    	handleHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)MessageProc, handleInstance, 0);
    
    	// On vérfie si l'installation a réussi
    	if(handleHook != NULL) {
    		handleWnd = hWnd;
    		return TRUE;
    	}
    	return FALSE;
    }
    
    
    // ***************************************
    // Fonction pour la désinstallation du Hook
    // ***************************************
    BOOL __stdcall UninstallHook(HWND hWnd) {
    	// probleme de HWND ou le hook n'est pas installé
    	if(hWnd != handleWnd || hWnd == NULL) return FALSE;
    
    	// tentative de desinstallation du hook
    	BOOL unhooked = UnhookWindowsHookEx(handleHook);
    	
    	// si la desinstallation a reussi
    	if (unhooked) handleWnd = NULL;
    	return unhooked;
    }
    
    
    // ***************************************
    // Le blocage lui même
    // ***************************************
    LRESULT CALLBACK MessageProc (int nCode, WPARAM wParam, LPARAM lParam) {
    	// le message est il à bloquer ?
    	if (nCode == HC_ACTION) {
    		if ((wParam == WM_RBUTTONDOWN) || (wParam == WM_RBUTTONUP)) return TRUE;
    	}
    	// le message n'etait pas a bloquer, on le renvoie
    	return CallNextHookEx(handleHook, nCode, wParam, lParam);
    }
    Les autres modifications sont en c# et sortent du cadre de la question d'origine et ne présentent gère de difficultés

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

Discussions similaires

  1. Interception du click droit
    Par nicknolt dans le forum IGN API Géoportail
    Réponses: 5
    Dernier message: 07/11/2010, 19h10
  2. Intercepter le click droit sur la barre de titre !
    Par cincap dans le forum Débuter
    Réponses: 8
    Dernier message: 09/07/2009, 12h46
  3. Interdire l'utilisation du click droit dans tout le document
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/03/2009, 15h58
  4. Réponses: 9
    Dernier message: 27/02/2008, 16h35
  5. Réponses: 1
    Dernier message: 02/02/2007, 20h12

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