Re: Machile level exception

new topic     » goto parent     » topic index » view thread      » older message » newer message

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

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu