/// <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; }