Пример #1
0
        int ProcessKeyboardEvent(int code, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam)
        {
            bool cancel = false;

            if (code >= 0 && lParam.scanCode != 0)
            {
                KeyboardEvent ev = null;
                switch (wParam.ToInt32())
                {
                case 0x0100: ev = OnKeyDown; break;       // 0x0100 = WM_KEYDOWN

                case 0x0101: ev = OnKeyUp; break;         // 0x0101 = WM_KEYUP

                case 0x0104: ev = OnSystemKeyDown; break; // 0x0104 = WM_SYSKEYDOWN

                case 0x0105: ev = OnSystemKeyUp; break;   // 0x0105 = WM_SYSKEYUP
                }

                // if any handler returns true, input will be canceled.
                if (ev != null)
                {
                    foreach (var d in ev.GetInvocationList())
                    {
                        cancel |= (bool)d.DynamicInvoke((Keys)lParam.vkCode, lParam.scanCode, lParam.flags);
                    }
                }
            }

            int result = CallNextHookEx(hHook, code, wParam, ref lParam);

            return((result != 0 || cancel) ? 1 : 0);
        }