示例#1
0
        /// <summary>
        /// Processes the key event captured by the hook.
        /// </summary>
        private IntPtr HookCallback(int nCode,
                                    IntPtr wParam,
                                    ref NativeMethodsKeyboard.KBDLLHOOKSTRUCT lParam)
        {
            if (nCode >= 0)
            {
                KeyboardRawEventArgs e = new KeyboardRawEventArgs(lParam);
                e.keyState = new byte[256];
                NativeMethodsKeyboard.GetKeyboardState(e.keyState);

                if (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN)
                {
                    e.Method = KeyUpDown.Down;
                }
                else if (wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYUP)
                {
                    e.Method = KeyUpDown.Up;
                }

                if (e.Method != KeyUpDown.Undefined)
                {
                    CheckModifiers(e);
                    FixKeyStateArray(e);
                    Log.e("KE", "EVENT " + e.Method.ToString() + " shift:" + e.Uppercase.ToString());
                    OnKeyEvent(e);
                }

                /*System.Diagnostics.Debug.WriteLine(
                 *  String.Format("Key: sc {0} vk {1} ext {2} fl {3}, {4}", lParam.scanCode,
                 *      lParam.vkCode, lParam.dwExtraInfo, lParam.flags, e.Method));
                 */
            }
            //Pass key to next application
            IntPtr ret = NativeMethodsKeyboard.CallNextHookEx(hookID, nCode, wParam, ref lParam);

            return(ret);
        }
        public byte[] keyState; // 256 bytes

        public KeyboardRawEventArgs(NativeMethodsKeyboard.KBDLLHOOKSTRUCT Kbdllhookstruct)
        {
            this.Kbdllhookstruct = Kbdllhookstruct;
        }