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:
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 ?
1 pièce(s) jointe(s)
[Résolu] hook clavier vs touches système WINDOWS
:resolu::yaisse:
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...