Beispiel #1
0
        private IntPtr LowLevelKeyboardHookProc(
            int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                KeyHookedStruct keyStruct = (KeyHookedStruct)Marshal.PtrToStructure(lParam, typeof(KeyHookedStruct));
                KeyMessage keyboardMessage = (KeyMessage)wParam;

                KeyStates state;
                switch (keyboardMessage)
                {
                    case KeyMessage.WM_KEYDOWM:
                    case KeyMessage.WM_SYSKEYDOWN:
                        state = KeyStates.KeyDown;
                        break;
                    case KeyMessage.WM_KEYUP:
                    case KeyMessage.WM_SYSKEYUP:
                        state = KeyStates.KeyUp;
                        break;
                    case KeyMessage.WM_CHAR:
                    case KeyMessage.WM_DEADCHAR:
                    case KeyMessage.WM_SYSCHAR:
                    default:
                        state = KeyStates.KeyQuest;
                        break;
                }

                KeyboardData keyData = new KeyboardData(keyStruct.VirtualKeyCode, state);

                return OnHooked(keyData) ? CallNextHookEx(mKeyboardHook, nCode, wParam, lParam) : new IntPtr(1);
            }
            else
                return CallNextHookEx(mKeyboardHook, nCode, wParam, lParam);
        }
Beispiel #2
0
 private INPUT BuildKeyInput(KeyboardData keyData)
 {
     INPUT input = new INPUT();
     input.mType = SENDINPUTEVENTTYPE.INPUT_KEYBOARD;
     input.mInputUnion.ki = new KEYBDINPUT
     {
         wVk = (short)keyData.Key.Code,
         dwFlags = (KeyState)keyData.State == KeyState.KeyUp ? KEYEVENTF.KEYUP : KEYEVENTF.NONE,
     };
     return input;
 }