summaryrefslogtreecommitdiff
path: root/windows/keybuddy2/src/hookfuncs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'windows/keybuddy2/src/hookfuncs.cpp')
-rw-r--r--windows/keybuddy2/src/hookfuncs.cpp60
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;
+ }
+}