Example #1
0
        public static void HookKeyboard(Input.KeyboardCallback cb)
        {
            Input.sHookProc = (Input.HookProc)((code, wparam, lparam) =>
            {
                if (code < 0 || wparam == 260U || wparam == 261U)
                {
                    return(Input.CallNextHookEx(Input.sHookHandle, code, wparam, lparam));
                }
                Input.HookData structure = (Input.HookData)Marshal.PtrToStructure(lparam, typeof(Input.HookData));
                return(!cb(wparam == 256U, structure.vkCode) ? 1 : Input.CallNextHookEx(Input.sHookHandle, code, wparam, lparam));
            });
            if (Input.sHookHandle != 0)
            {
                throw new SystemException("Keyboard hook is already set");
            }
            IntPtr moduleHandle = Input.GetModuleHandle(IntPtr.Zero);

            Input.sHookHandle = Input.SetWindowsHookEx(13, Input.sHookProc, moduleHandle, 0U);
            if (Input.sHookHandle == 0)
            {
                throw new SystemException("Cannot set hooks", (Exception) new Win32Exception(Marshal.GetLastWin32Error()));
            }
        }
Example #2
0
 private static extern int SetWindowsHookEx(
     int type,
     Input.HookProc callback,
     IntPtr module,
     uint threadId);