示例#1
0
        private void SyncModifierKeyState(KeyboardHook.ModifierKeys modifierKeys)
        {
            if ((PreviousModifierKeyState & KeyboardHook.ModifierKeys.LeftShift) !=
                (modifierKeys & KeyboardHook.ModifierKeys.LeftShift))
            {
                vnc.WriteKeyboardEvent(RfbProtocol.XK_Shift_L,
                                       (modifierKeys & KeyboardHook.ModifierKeys.LeftShift) != 0);
            }
            if ((PreviousModifierKeyState & KeyboardHook.ModifierKeys.RightShift) !=
                (modifierKeys & KeyboardHook.ModifierKeys.RightShift))
            {
                vnc.WriteKeyboardEvent(RfbProtocol.XK_Shift_R,
                                       (modifierKeys & KeyboardHook.ModifierKeys.RightShift) != 0);
            }

            if ((PreviousModifierKeyState & KeyboardHook.ModifierKeys.LeftControl) !=
                (modifierKeys & KeyboardHook.ModifierKeys.LeftControl))
            {
                vnc.WriteKeyboardEvent(RfbProtocol.XK_Control_L,
                                       (modifierKeys & KeyboardHook.ModifierKeys.LeftControl) != 0);
            }
            if ((PreviousModifierKeyState & KeyboardHook.ModifierKeys.RightControl) !=
                (modifierKeys & KeyboardHook.ModifierKeys.RightControl))
            {
                vnc.WriteKeyboardEvent(RfbProtocol.XK_Control_R,
                                       (modifierKeys & KeyboardHook.ModifierKeys.RightControl) != 0);
            }

            if ((PreviousModifierKeyState & KeyboardHook.ModifierKeys.LeftAlt) !=
                (modifierKeys & KeyboardHook.ModifierKeys.LeftAlt))
            {
                vnc.WriteKeyboardEvent(RfbProtocol.XK_Alt_L, (modifierKeys & KeyboardHook.ModifierKeys.LeftAlt) != 0);
            }
            if ((PreviousModifierKeyState & KeyboardHook.ModifierKeys.RightAlt) !=
                (modifierKeys & KeyboardHook.ModifierKeys.RightAlt))
            {
                vnc.WriteKeyboardEvent(RfbProtocol.XK_Alt_R, (modifierKeys & KeyboardHook.ModifierKeys.RightAlt) != 0);
            }

            if ((PreviousModifierKeyState & KeyboardHook.ModifierKeys.LeftWin) !=
                (modifierKeys & KeyboardHook.ModifierKeys.LeftWin))
            {
                vnc.WriteKeyboardEvent(RfbProtocol.XK_Super_L, (modifierKeys & KeyboardHook.ModifierKeys.LeftWin) != 0);
            }
            if ((PreviousModifierKeyState & KeyboardHook.ModifierKeys.RightWin) !=
                (modifierKeys & KeyboardHook.ModifierKeys.RightWin))
            {
                vnc.WriteKeyboardEvent(RfbProtocol.XK_Super_R,
                                       (modifierKeys & KeyboardHook.ModifierKeys.RightWin) != 0);
            }

            PreviousModifierKeyState = modifierKeys;
        }
示例#2
0
        // Thanks to Lionel Cuir, Christian and the other developers at
        // Aulofee.com for cleaning-up my keyboard code, specifically:
        // ManageKeyDownAndKeyUp, OnKeyPress, OnKeyUp, OnKeyDown.
        private void ManageKeyDownAndKeyUp(KeyEventArgs e, bool isDown)
        {
            UInt32 keyChar;
            bool   isProcessed = true;

            switch (e.KeyCode)
            {
            case Keys.Tab: keyChar = 0x0000FF09; break;

            case Keys.Enter: keyChar = 0x0000FF0D; break;

            case Keys.Escape: keyChar = 0x0000FF1B; break;

            case Keys.Home: keyChar = 0x0000FF50; break;

            case Keys.Left: keyChar = 0x0000FF51; break;

            case Keys.Up: keyChar = 0x0000FF52; break;

            case Keys.Right: keyChar = 0x0000FF53; break;

            case Keys.Down: keyChar = 0x0000FF54; break;

            case Keys.PageUp: keyChar = 0x0000FF55; break;

            case Keys.PageDown: keyChar = 0x0000FF56; break;

            case Keys.End: keyChar = 0x0000FF57; break;

            case Keys.Insert: keyChar = 0x0000FF63; break;

            case Keys.ShiftKey: keyChar = 0x0000FFE1; break;

            // BUG FIX -- added proper Alt/CTRL support (Edward Cooke)
            case Keys.Alt: keyChar = 0x0000FFE9; break;

            case Keys.ControlKey: keyChar = 0x0000FFE3; break;

            case Keys.LControlKey: keyChar = 0x0000FFE3; break;

            case Keys.RControlKey: keyChar = 0x0000FFE4; break;

            case Keys.Menu: keyChar = 0x0000FFE9; break;

            case Keys.Delete: keyChar = 0x0000FFFF; break;

            case Keys.LWin: keyChar = 0x0000FFEB; break;

            case Keys.RWin: keyChar = 0x0000FFEC; break;

            case Keys.Apps: keyChar = 0x0000FFEE; break;

            case Keys.F1:
            case Keys.F2:
            case Keys.F3:
            case Keys.F4:
            case Keys.F5:
            case Keys.F6:
            case Keys.F7:
            case Keys.F8:
            case Keys.F9:
            case Keys.F10:
            case Keys.F11:
            case Keys.F12:
                keyChar = 0x0000FFBE + ((UInt32)e.KeyCode - (UInt32)Keys.F1);
                break;

            default:
                keyChar     = 0;
                isProcessed = false;
                break;
            }

            if (isProcessed)
            {
                vnc.WriteKeyboardEvent(keyChar, isDown);
                e.Handled = true;
            }
        }