Re: Machile level exception
- Posted by gbonvehi Jan 22, 2009
- 1051 views
Ok, here's the code, you may need to tweak it. The w32allot method is win32lib specific but it's easy to emulate if you need.
global constant fUser32 = open_dll("user32.dll"), xSetWindowsHookEx = define_c_func(fUser32,"SetWindowsHookExA",{C_INT,C_POINTER,C_POINTER,C_POINTER},C_POINTER), xUnhookWindowsHookEx = define_c_proc(fUser32,"UnhookWindowsHookEx",{C_POINTER}), xCallNextHookEx = define_c_func(fUser32,"CallNextHookEx",{C_POINTER,C_INT,C_POINTER,C_POINTER},C_POINTER), WH_KEYBOARD_LL = 13 constant kbhook_vkCode= w32allot( DWord ), kbhook_scanCode= w32allot( DWord ), kbhook_flags= w32allot( DWord ), kbhook_time= w32allot( DWord ), kbhook_dwExtraInfo= w32allot( DWord ), SIZEOF_KBDLLHOOKSTRUCT = w32allotted_size() atom HookKeyboard function CallBackHook( integer Code, atom wParam, atom lParam ) atom vkCode integer currvent if Code=0 then if wParam = WM_KEYUP or wParam = WM_SYSKEYUP then vkCode = w32fetch(lParam, kbhook_vkCode) if vkCode = VK_F5 then -- something return 1 elsif vkCode = VK_F6 then -- something return 1 end if end if end if return c_func(xCallNextHookEx,{HookKeyboard, Code, wParam, lParam}) end function -- Call this to setup the hook HookKeyboard = c_func(xSetWindowsHookEx, {WH_KEYBOARD_LL, call_back(routine_id("CallBackHook")), instance(), 0 }) -- Call this to stop the hook c_proc(xUnhookWindowsHookEx,{HookKeyboard})
I hope this works for you, I copied just the relevant parts, but I think I didn't skip anything you'll need.
Regards,
Guillermo