diff options
Diffstat (limited to 'windows/keybuddy2/src/hookfuncs.cpp')
| -rw-r--r-- | windows/keybuddy2/src/hookfuncs.cpp | 60 | 
1 files changed, 60 insertions, 0 deletions
diff --git a/windows/keybuddy2/src/hookfuncs.cpp b/windows/keybuddy2/src/hookfuncs.cpp new file mode 100644 index 0000000..26686a4 --- /dev/null +++ b/windows/keybuddy2/src/hookfuncs.cpp @@ -0,0 +1,60 @@ +
 +#include "includes.h"
 +
 +HHOOK hHookKB2=NULL;
 +
 +// install low level keyboard hook
 +int SetHook()
 +{
 +    int err = 0;
 +    hHookKB2 = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)LowLevelKeyboardProc, GetModuleHandle( NULL ),0);
 +    if(hHookKB2==NULL)
 +    {
 +        err = (int)GetLastError();
 +        return err;
 +    }
 +    return 0;
 +}
 +
 +// remove low level keyboard hook
 +int RemoveHook()
 +{
 +    BOOL Hbool = 0;
 +    int err = 0;
 +    Hbool = UnhookWindowsHookEx(hHookKB2);
 +    if(Hbool == 0)
 +    {
 +        err = (int)GetLastError();
 +        return err;
 +    }
 +    return 0;
 +}
 +
 +// this function is called by windows if a key is pressed
 +LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
 +{
 +    KBDLLHOOKSTRUCT *kbdl_struct;
 +    
 +    if(nCode != HC_ACTION){
 +	    return ( CallNextHookEx(hHookKB2, nCode, wParam, lParam) );
 +    }
 +
 +    kbdl_struct = (KBDLLHOOKSTRUCT*) lParam;
 +
 +	if(KeyBuddy2::ProcessKbdEvent(
 +		wParam,
 +		kbdl_struct->vkCode,
 +		kbdl_struct->scanCode,
 +		(kbdl_struct->flags & LLKHF_EXTENDED) !=0,
 +		(kbdl_struct->flags & LLKHF_INJECTED) !=0,
 +		(kbdl_struct->flags & LLKHF_ALTDOWN) !=0,
 +		(kbdl_struct->flags & LLKHF_UP) !=0,
 +		kbdl_struct->dwExtraInfo))
 +	{
 +		return ( CallNextHookEx(hHookKB2, nCode, wParam, lParam) );
 +	}
 +	else
 +	{
 +		return 1;
 +	}
 +}
  | 
