|
|
|
|
@@ -614,264 +614,266 @@ CMSWindowsPrimaryScreen::ignore() const
|
|
|
|
|
return (m_mark != m_markReceived);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static const KeyID g_virtualKey[] =
|
|
|
|
|
// map virtual keys to synergy key enumeration. use extended keyboard
|
|
|
|
|
// bit to distinguish some keys.
|
|
|
|
|
static const KeyID g_virtualKey[][2] =
|
|
|
|
|
{
|
|
|
|
|
/* 0x00 */ kKeyNone, // reserved
|
|
|
|
|
/* 0x01 */ kKeyNone, // VK_LBUTTON
|
|
|
|
|
/* 0x02 */ kKeyNone, // VK_RBUTTON
|
|
|
|
|
/* 0x03 */ kKeyBreak, // VK_CANCEL
|
|
|
|
|
/* 0x04 */ kKeyNone, // VK_MBUTTON
|
|
|
|
|
/* 0x05 */ kKeyNone, // undefined
|
|
|
|
|
/* 0x06 */ kKeyNone, // undefined
|
|
|
|
|
/* 0x07 */ kKeyNone, // undefined
|
|
|
|
|
/* 0x08 */ kKeyBackSpace, // VK_BACK
|
|
|
|
|
/* 0x09 */ kKeyTab, // VK_TAB
|
|
|
|
|
/* 0x0a */ kKeyNone, // undefined
|
|
|
|
|
/* 0x0b */ kKeyNone, // undefined
|
|
|
|
|
/* 0x0c */ kKeyClear, // VK_CLEAR
|
|
|
|
|
/* 0x0d */ kKeyReturn, // VK_RETURN
|
|
|
|
|
/* 0x0e */ kKeyNone, // undefined
|
|
|
|
|
/* 0x0f */ kKeyNone, // undefined
|
|
|
|
|
/* 0x10 */ kKeyShift_L, // VK_SHIFT
|
|
|
|
|
/* 0x11 */ kKeyControl_L, // VK_CONTROL
|
|
|
|
|
/* 0x12 */ kKeyAlt_L, // VK_MENU
|
|
|
|
|
/* 0x13 */ kKeyPause, // VK_PAUSE
|
|
|
|
|
/* 0x14 */ kKeyCapsLock, // VK_CAPITAL
|
|
|
|
|
/* 0x15 */ kKeyNone, // VK_KANA
|
|
|
|
|
/* 0x16 */ kKeyNone, // VK_HANGUL
|
|
|
|
|
/* 0x17 */ kKeyNone, // VK_JUNJA
|
|
|
|
|
/* 0x18 */ kKeyNone, // VK_FINAL
|
|
|
|
|
/* 0x19 */ kKeyNone, // VK_KANJI
|
|
|
|
|
/* 0x1a */ kKeyNone, // undefined
|
|
|
|
|
/* 0x1b */ kKeyEscape, // VK_ESCAPE
|
|
|
|
|
/* 0x1c */ kKeyNone, // VK_CONVERT
|
|
|
|
|
/* 0x1d */ kKeyNone, // VK_NONCONVERT
|
|
|
|
|
/* 0x1e */ kKeyNone, // VK_ACCEPT
|
|
|
|
|
/* 0x1f */ kKeyNone, // VK_MODECHANGE
|
|
|
|
|
/* 0x20 */ 0x0020, // VK_SPACE
|
|
|
|
|
/* 0x21 */ kKeyPageUp, // VK_PRIOR
|
|
|
|
|
/* 0x22 */ kKeyPageDown, // VK_NEXT
|
|
|
|
|
/* 0x23 */ kKeyEnd, // VK_END
|
|
|
|
|
/* 0x24 */ kKeyHome, // VK_HOME
|
|
|
|
|
/* 0x25 */ kKeyLeft, // VK_LEFT
|
|
|
|
|
/* 0x26 */ kKeyUp, // VK_UP
|
|
|
|
|
/* 0x27 */ kKeyRight, // VK_RIGHT
|
|
|
|
|
/* 0x28 */ kKeyDown, // VK_DOWN
|
|
|
|
|
/* 0x29 */ kKeySelect, // VK_SELECT
|
|
|
|
|
/* 0x2a */ kKeyNone, // VK_PRINT
|
|
|
|
|
/* 0x2b */ kKeyExecute, // VK_EXECUTE
|
|
|
|
|
/* 0x2c */ kKeyPrint, // VK_SNAPSHOT
|
|
|
|
|
/* 0x2d */ kKeyInsert, // VK_INSERT
|
|
|
|
|
/* 0x2e */ kKeyDelete, // VK_DELETE
|
|
|
|
|
/* 0x2f */ kKeyHelp, // VK_HELP
|
|
|
|
|
/* 0x30 */ kKeyNone, // VK_0
|
|
|
|
|
/* 0x31 */ kKeyNone, // VK_1
|
|
|
|
|
/* 0x32 */ kKeyNone, // VK_2
|
|
|
|
|
/* 0x33 */ kKeyNone, // VK_3
|
|
|
|
|
/* 0x34 */ kKeyNone, // VK_4
|
|
|
|
|
/* 0x35 */ kKeyNone, // VK_5
|
|
|
|
|
/* 0x36 */ kKeyNone, // VK_6
|
|
|
|
|
/* 0x37 */ kKeyNone, // VK_7
|
|
|
|
|
/* 0x38 */ kKeyNone, // VK_8
|
|
|
|
|
/* 0x39 */ kKeyNone, // VK_9
|
|
|
|
|
/* 0x3a */ kKeyNone, // undefined
|
|
|
|
|
/* 0x3b */ kKeyNone, // undefined
|
|
|
|
|
/* 0x3c */ kKeyNone, // undefined
|
|
|
|
|
/* 0x3d */ kKeyNone, // undefined
|
|
|
|
|
/* 0x3e */ kKeyNone, // undefined
|
|
|
|
|
/* 0x3f */ kKeyNone, // undefined
|
|
|
|
|
/* 0x40 */ kKeyNone, // undefined
|
|
|
|
|
/* 0x41 */ kKeyNone, // VK_A
|
|
|
|
|
/* 0x42 */ kKeyNone, // VK_B
|
|
|
|
|
/* 0x43 */ kKeyNone, // VK_C
|
|
|
|
|
/* 0x44 */ kKeyNone, // VK_D
|
|
|
|
|
/* 0x45 */ kKeyNone, // VK_E
|
|
|
|
|
/* 0x46 */ kKeyNone, // VK_F
|
|
|
|
|
/* 0x47 */ kKeyNone, // VK_G
|
|
|
|
|
/* 0x48 */ kKeyNone, // VK_H
|
|
|
|
|
/* 0x49 */ kKeyNone, // VK_I
|
|
|
|
|
/* 0x4a */ kKeyNone, // VK_J
|
|
|
|
|
/* 0x4b */ kKeyNone, // VK_K
|
|
|
|
|
/* 0x4c */ kKeyNone, // VK_L
|
|
|
|
|
/* 0x4d */ kKeyNone, // VK_M
|
|
|
|
|
/* 0x4e */ kKeyNone, // VK_N
|
|
|
|
|
/* 0x4f */ kKeyNone, // VK_O
|
|
|
|
|
/* 0x50 */ kKeyNone, // VK_P
|
|
|
|
|
/* 0x51 */ kKeyNone, // VK_Q
|
|
|
|
|
/* 0x52 */ kKeyNone, // VK_R
|
|
|
|
|
/* 0x53 */ kKeyNone, // VK_S
|
|
|
|
|
/* 0x54 */ kKeyNone, // VK_T
|
|
|
|
|
/* 0x55 */ kKeyNone, // VK_U
|
|
|
|
|
/* 0x56 */ kKeyNone, // VK_V
|
|
|
|
|
/* 0x57 */ kKeyNone, // VK_W
|
|
|
|
|
/* 0x58 */ kKeyNone, // VK_X
|
|
|
|
|
/* 0x59 */ kKeyNone, // VK_Y
|
|
|
|
|
/* 0x5a */ kKeyNone, // VK_Z
|
|
|
|
|
/* 0x5b */ kKeyMeta_L, // VK_LWIN
|
|
|
|
|
/* 0x5c */ kKeyMeta_R, // VK_RWIN
|
|
|
|
|
/* 0x5d */ kKeyMenu, // VK_APPS
|
|
|
|
|
/* 0x5e */ kKeyNone, // undefined
|
|
|
|
|
/* 0x5f */ kKeyNone, // undefined
|
|
|
|
|
/* 0x60 */ kKeyKP_0, // VK_NUMPAD0
|
|
|
|
|
/* 0x61 */ kKeyKP_1, // VK_NUMPAD1
|
|
|
|
|
/* 0x62 */ kKeyKP_2, // VK_NUMPAD2
|
|
|
|
|
/* 0x63 */ kKeyKP_3, // VK_NUMPAD3
|
|
|
|
|
/* 0x64 */ kKeyKP_4, // VK_NUMPAD4
|
|
|
|
|
/* 0x65 */ kKeyKP_5, // VK_NUMPAD5
|
|
|
|
|
/* 0x66 */ kKeyKP_6, // VK_NUMPAD6
|
|
|
|
|
/* 0x67 */ kKeyKP_7, // VK_NUMPAD7
|
|
|
|
|
/* 0x68 */ kKeyKP_8, // VK_NUMPAD8
|
|
|
|
|
/* 0x69 */ kKeyKP_9, // VK_NUMPAD9
|
|
|
|
|
/* 0x6a */ kKeyKP_Multiply, // VK_MULTIPLY
|
|
|
|
|
/* 0x6b */ kKeyKP_Add, // VK_ADD
|
|
|
|
|
/* 0x6c */ kKeyKP_Separator,// VK_SEPARATOR
|
|
|
|
|
/* 0x6d */ kKeyKP_Subtract, // VK_SUBTRACT
|
|
|
|
|
/* 0x6e */ kKeyKP_Decimal, // VK_DECIMAL
|
|
|
|
|
/* 0x6f */ kKeyKP_Divide, // VK_DIVIDE
|
|
|
|
|
/* 0x70 */ kKeyF1, // VK_F1
|
|
|
|
|
/* 0x71 */ kKeyF2, // VK_F2
|
|
|
|
|
/* 0x72 */ kKeyF3, // VK_F3
|
|
|
|
|
/* 0x73 */ kKeyF4, // VK_F4
|
|
|
|
|
/* 0x74 */ kKeyF5, // VK_F5
|
|
|
|
|
/* 0x75 */ kKeyF6, // VK_F6
|
|
|
|
|
/* 0x76 */ kKeyF7, // VK_F7
|
|
|
|
|
/* 0x77 */ kKeyF8, // VK_F8
|
|
|
|
|
/* 0x78 */ kKeyF9, // VK_F9
|
|
|
|
|
/* 0x79 */ kKeyF10, // VK_F10
|
|
|
|
|
/* 0x7a */ kKeyF11, // VK_F11
|
|
|
|
|
/* 0x7b */ kKeyF12, // VK_F12
|
|
|
|
|
/* 0x7c */ kKeyF13, // VK_F13
|
|
|
|
|
/* 0x7d */ kKeyF14, // VK_F14
|
|
|
|
|
/* 0x7e */ kKeyF15, // VK_F15
|
|
|
|
|
/* 0x7f */ kKeyF16, // VK_F16
|
|
|
|
|
/* 0x80 */ kKeyF17, // VK_F17
|
|
|
|
|
/* 0x81 */ kKeyF18, // VK_F18
|
|
|
|
|
/* 0x82 */ kKeyF19, // VK_F19
|
|
|
|
|
/* 0x83 */ kKeyF20, // VK_F20
|
|
|
|
|
/* 0x84 */ kKeyF21, // VK_F21
|
|
|
|
|
/* 0x85 */ kKeyF22, // VK_F22
|
|
|
|
|
/* 0x86 */ kKeyF23, // VK_F23
|
|
|
|
|
/* 0x87 */ kKeyF24, // VK_F24
|
|
|
|
|
/* 0x88 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x89 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x8a */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x8b */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x8c */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x8d */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x8e */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x8f */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x90 */ kKeyNumLock, // VK_NUMLOCK
|
|
|
|
|
/* 0x91 */ kKeyScrollLock, // VK_SCROLL
|
|
|
|
|
/* 0x92 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x93 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x94 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x95 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x96 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x97 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x98 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x99 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x9a */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x9b */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x9c */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x9d */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x9e */ kKeyNone, // unassigned
|
|
|
|
|
/* 0x9f */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xa0 */ kKeyShift_L, // VK_LSHIFT
|
|
|
|
|
/* 0xa1 */ kKeyShift_R, // VK_RSHIFT
|
|
|
|
|
/* 0xa2 */ kKeyControl_L, // VK_LCONTROL
|
|
|
|
|
/* 0xa3 */ kKeyControl_R, // VK_RCONTROL
|
|
|
|
|
/* 0xa4 */ kKeyAlt_L, // VK_LMENU
|
|
|
|
|
/* 0xa5 */ kKeyAlt_R, // VK_RMENU
|
|
|
|
|
/* 0xa6 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xa7 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xa8 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xa9 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xaa */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xab */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xac */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xad */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xae */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xaf */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb0 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb1 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb2 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb3 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb4 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb5 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb6 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb7 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb8 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xb9 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xba */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbb */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbc */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbd */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbe */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbf */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xc0 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xc1 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xc2 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xc3 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xc4 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xc5 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xc6 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xc7 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xc8 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xc9 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xca */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xcb */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xcc */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xcd */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xce */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xcf */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd0 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd1 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd2 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd3 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd4 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd5 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd6 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd7 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd8 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xd9 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xda */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xdb */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xdc */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xdd */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xde */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xdf */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe0 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe1 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe2 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe3 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe4 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe5 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xe6 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe7 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xe8 */ kKeyNone, // unassigned
|
|
|
|
|
/* 0xe9 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xea */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xeb */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xec */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xed */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xee */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xef */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf0 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf1 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf2 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf3 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf4 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf5 */ kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf6 */ kKeyNone, // VK_ATTN
|
|
|
|
|
/* 0xf7 */ kKeyNone, // VK_CRSEL
|
|
|
|
|
/* 0xf8 */ kKeyNone, // VK_EXSEL
|
|
|
|
|
/* 0xf9 */ kKeyNone, // VK_EREOF
|
|
|
|
|
/* 0xfa */ kKeyNone, // VK_PLAY
|
|
|
|
|
/* 0xfb */ kKeyNone, // VK_ZOOM
|
|
|
|
|
/* 0xfc */ kKeyNone, // reserved
|
|
|
|
|
/* 0xfd */ kKeyNone, // VK_PA1
|
|
|
|
|
/* 0xfe */ kKeyNone, // VK_OEM_CLEAR
|
|
|
|
|
/* 0xff */ kKeyNone // reserved
|
|
|
|
|
/* 0x00 */ kKeyNone, kKeyNone, // reserved
|
|
|
|
|
/* 0x01 */ kKeyNone, kKeyNone, // VK_LBUTTON
|
|
|
|
|
/* 0x02 */ kKeyNone, kKeyNone, // VK_RBUTTON
|
|
|
|
|
/* 0x03 */ kKeyNone, kKeyBreak, // VK_CANCEL
|
|
|
|
|
/* 0x04 */ kKeyNone, kKeyNone, // VK_MBUTTON
|
|
|
|
|
/* 0x05 */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x06 */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x07 */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x08 */ kKeyBackSpace, kKeyNone, // VK_BACK
|
|
|
|
|
/* 0x09 */ kKeyTab, kKeyNone, // VK_TAB
|
|
|
|
|
/* 0x0a */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x0b */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x0c */ kKeyClear, kKeyClear, // VK_CLEAR
|
|
|
|
|
/* 0x0d */ kKeyReturn, kKeyKP_Enter, // VK_RETURN
|
|
|
|
|
/* 0x0e */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x0f */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x10 */ kKeyShift_L, kKeyShift_R, // VK_SHIFT
|
|
|
|
|
/* 0x11 */ kKeyControl_L, kKeyControl_R, // VK_CONTROL
|
|
|
|
|
/* 0x12 */ kKeyAlt_L, kKeyAlt_R, // VK_MENU
|
|
|
|
|
/* 0x13 */ kKeyPause, kKeyNone, // VK_PAUSE
|
|
|
|
|
/* 0x14 */ kKeyCapsLock, kKeyNone, // VK_CAPITAL
|
|
|
|
|
/* 0x15 */ kKeyNone, kKeyNone, // VK_KANA
|
|
|
|
|
/* 0x16 */ kKeyNone, kKeyNone, // VK_HANGUL
|
|
|
|
|
/* 0x17 */ kKeyNone, kKeyNone, // VK_JUNJA
|
|
|
|
|
/* 0x18 */ kKeyNone, kKeyNone, // VK_FINAL
|
|
|
|
|
/* 0x19 */ kKeyNone, kKeyNone, // VK_KANJI
|
|
|
|
|
/* 0x1a */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x1b */ kKeyEscape, kKeyNone, // VK_ESCAPE
|
|
|
|
|
/* 0x1c */ kKeyNone, kKeyNone, // VK_CONVERT
|
|
|
|
|
/* 0x1d */ kKeyNone, kKeyNone, // VK_NONCONVERT
|
|
|
|
|
/* 0x1e */ kKeyNone, kKeyNone, // VK_ACCEPT
|
|
|
|
|
/* 0x1f */ kKeyNone, kKeyNone, // VK_MODECHANGE
|
|
|
|
|
/* 0x20 */ 0x0020, kKeyNone, // VK_SPACE
|
|
|
|
|
/* 0x21 */ kKeyKP_PageUp, kKeyPageUp, // VK_PRIOR
|
|
|
|
|
/* 0x22 */ kKeyKP_PageDown, kKeyPageDown, // VK_NEXT
|
|
|
|
|
/* 0x23 */ kKeyKP_End, kKeyEnd, // VK_END
|
|
|
|
|
/* 0x24 */ kKeyKP_Home, kKeyHome, // VK_HOME
|
|
|
|
|
/* 0x25 */ kKeyKP_Left, kKeyLeft, // VK_LEFT
|
|
|
|
|
/* 0x26 */ kKeyKP_Up, kKeyUp, // VK_UP
|
|
|
|
|
/* 0x27 */ kKeyKP_Right, kKeyRight, // VK_RIGHT
|
|
|
|
|
/* 0x28 */ kKeyKP_Down, kKeyDown, // VK_DOWN
|
|
|
|
|
/* 0x29 */ kKeySelect, kKeySelect, // VK_SELECT
|
|
|
|
|
/* 0x2a */ kKeyNone, kKeyNone, // VK_PRINT
|
|
|
|
|
/* 0x2b */ kKeyExecute, kKeyExecute, // VK_EXECUTE
|
|
|
|
|
/* 0x2c */ kKeyPrint, kKeyPrint, // VK_SNAPSHOT
|
|
|
|
|
/* 0x2d */ kKeyKP_Insert, kKeyInsert, // VK_INSERT
|
|
|
|
|
/* 0x2e */ kKeyKP_Delete, kKeyDelete, // VK_DELETE
|
|
|
|
|
/* 0x2f */ kKeyHelp, kKeyHelp, // VK_HELP
|
|
|
|
|
/* 0x30 */ kKeyNone, kKeyNone, // VK_0
|
|
|
|
|
/* 0x31 */ kKeyNone, kKeyNone, // VK_1
|
|
|
|
|
/* 0x32 */ kKeyNone, kKeyNone, // VK_2
|
|
|
|
|
/* 0x33 */ kKeyNone, kKeyNone, // VK_3
|
|
|
|
|
/* 0x34 */ kKeyNone, kKeyNone, // VK_4
|
|
|
|
|
/* 0x35 */ kKeyNone, kKeyNone, // VK_5
|
|
|
|
|
/* 0x36 */ kKeyNone, kKeyNone, // VK_6
|
|
|
|
|
/* 0x37 */ kKeyNone, kKeyNone, // VK_7
|
|
|
|
|
/* 0x38 */ kKeyNone, kKeyNone, // VK_8
|
|
|
|
|
/* 0x39 */ kKeyNone, kKeyNone, // VK_9
|
|
|
|
|
/* 0x3a */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x3b */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x3c */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x3d */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x3e */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x3f */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x40 */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x41 */ kKeyNone, kKeyNone, // VK_A
|
|
|
|
|
/* 0x42 */ kKeyNone, kKeyNone, // VK_B
|
|
|
|
|
/* 0x43 */ kKeyNone, kKeyNone, // VK_C
|
|
|
|
|
/* 0x44 */ kKeyNone, kKeyNone, // VK_D
|
|
|
|
|
/* 0x45 */ kKeyNone, kKeyNone, // VK_E
|
|
|
|
|
/* 0x46 */ kKeyNone, kKeyNone, // VK_F
|
|
|
|
|
/* 0x47 */ kKeyNone, kKeyNone, // VK_G
|
|
|
|
|
/* 0x48 */ kKeyNone, kKeyNone, // VK_H
|
|
|
|
|
/* 0x49 */ kKeyNone, kKeyNone, // VK_I
|
|
|
|
|
/* 0x4a */ kKeyNone, kKeyNone, // VK_J
|
|
|
|
|
/* 0x4b */ kKeyNone, kKeyNone, // VK_K
|
|
|
|
|
/* 0x4c */ kKeyNone, kKeyNone, // VK_L
|
|
|
|
|
/* 0x4d */ kKeyNone, kKeyNone, // VK_M
|
|
|
|
|
/* 0x4e */ kKeyNone, kKeyNone, // VK_N
|
|
|
|
|
/* 0x4f */ kKeyNone, kKeyNone, // VK_O
|
|
|
|
|
/* 0x50 */ kKeyNone, kKeyNone, // VK_P
|
|
|
|
|
/* 0x51 */ kKeyNone, kKeyNone, // VK_Q
|
|
|
|
|
/* 0x52 */ kKeyNone, kKeyNone, // VK_R
|
|
|
|
|
/* 0x53 */ kKeyNone, kKeyNone, // VK_S
|
|
|
|
|
/* 0x54 */ kKeyNone, kKeyNone, // VK_T
|
|
|
|
|
/* 0x55 */ kKeyNone, kKeyNone, // VK_U
|
|
|
|
|
/* 0x56 */ kKeyNone, kKeyNone, // VK_V
|
|
|
|
|
/* 0x57 */ kKeyNone, kKeyNone, // VK_W
|
|
|
|
|
/* 0x58 */ kKeyNone, kKeyNone, // VK_X
|
|
|
|
|
/* 0x59 */ kKeyNone, kKeyNone, // VK_Y
|
|
|
|
|
/* 0x5a */ kKeyNone, kKeyNone, // VK_Z
|
|
|
|
|
/* 0x5b */ kKeyNone, kKeyMeta_L, // VK_LWIN
|
|
|
|
|
/* 0x5c */ kKeyNone, kKeyMeta_R, // VK_RWIN
|
|
|
|
|
/* 0x5d */ kKeyMenu, kKeyMenu, // VK_APPS
|
|
|
|
|
/* 0x5e */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x5f */ kKeyNone, kKeyNone, // undefined
|
|
|
|
|
/* 0x60 */ kKeyKP_0, kKeyNone, // VK_NUMPAD0
|
|
|
|
|
/* 0x61 */ kKeyKP_1, kKeyNone, // VK_NUMPAD1
|
|
|
|
|
/* 0x62 */ kKeyKP_2, kKeyNone, // VK_NUMPAD2
|
|
|
|
|
/* 0x63 */ kKeyKP_3, kKeyNone, // VK_NUMPAD3
|
|
|
|
|
/* 0x64 */ kKeyKP_4, kKeyNone, // VK_NUMPAD4
|
|
|
|
|
/* 0x65 */ kKeyKP_5, kKeyNone, // VK_NUMPAD5
|
|
|
|
|
/* 0x66 */ kKeyKP_6, kKeyNone, // VK_NUMPAD6
|
|
|
|
|
/* 0x67 */ kKeyKP_7, kKeyNone, // VK_NUMPAD7
|
|
|
|
|
/* 0x68 */ kKeyKP_8, kKeyNone, // VK_NUMPAD8
|
|
|
|
|
/* 0x69 */ kKeyKP_9, kKeyNone, // VK_NUMPAD9
|
|
|
|
|
/* 0x6a */ kKeyKP_Multiply, kKeyNone, // VK_MULTIPLY
|
|
|
|
|
/* 0x6b */ kKeyKP_Add, kKeyNone, // VK_ADD
|
|
|
|
|
/* 0x6c */ kKeyKP_Separator,kKeyKP_Separator,// VK_SEPARATOR
|
|
|
|
|
/* 0x6d */ kKeyKP_Subtract, kKeyNone, // VK_SUBTRACT
|
|
|
|
|
/* 0x6e */ kKeyKP_Decimal, kKeyNone, // VK_DECIMAL
|
|
|
|
|
/* 0x6f */ kKeyNone, kKeyKP_Divide, // VK_DIVIDE
|
|
|
|
|
/* 0x70 */ kKeyF1, kKeyNone, // VK_F1
|
|
|
|
|
/* 0x71 */ kKeyF2, kKeyNone, // VK_F2
|
|
|
|
|
/* 0x72 */ kKeyF3, kKeyNone, // VK_F3
|
|
|
|
|
/* 0x73 */ kKeyF4, kKeyNone, // VK_F4
|
|
|
|
|
/* 0x74 */ kKeyF5, kKeyNone, // VK_F5
|
|
|
|
|
/* 0x75 */ kKeyF6, kKeyNone, // VK_F6
|
|
|
|
|
/* 0x76 */ kKeyF7, kKeyNone, // VK_F7
|
|
|
|
|
/* 0x77 */ kKeyF8, kKeyNone, // VK_F8
|
|
|
|
|
/* 0x78 */ kKeyF9, kKeyNone, // VK_F9
|
|
|
|
|
/* 0x79 */ kKeyF10, kKeyNone, // VK_F10
|
|
|
|
|
/* 0x7a */ kKeyF11, kKeyNone, // VK_F11
|
|
|
|
|
/* 0x7b */ kKeyF12, kKeyNone, // VK_F12
|
|
|
|
|
/* 0x7c */ kKeyF13, kKeyF13, // VK_F13
|
|
|
|
|
/* 0x7d */ kKeyF14, kKeyF14, // VK_F14
|
|
|
|
|
/* 0x7e */ kKeyF15, kKeyF15, // VK_F15
|
|
|
|
|
/* 0x7f */ kKeyF16, kKeyF16, // VK_F16
|
|
|
|
|
/* 0x80 */ kKeyF17, kKeyF17, // VK_F17
|
|
|
|
|
/* 0x81 */ kKeyF18, kKeyF18, // VK_F18
|
|
|
|
|
/* 0x82 */ kKeyF19, kKeyF19, // VK_F19
|
|
|
|
|
/* 0x83 */ kKeyF20, kKeyF20, // VK_F20
|
|
|
|
|
/* 0x84 */ kKeyF21, kKeyF21, // VK_F21
|
|
|
|
|
/* 0x85 */ kKeyF22, kKeyF22, // VK_F22
|
|
|
|
|
/* 0x86 */ kKeyF23, kKeyF23, // VK_F23
|
|
|
|
|
/* 0x87 */ kKeyF24, kKeyF24, // VK_F24
|
|
|
|
|
/* 0x88 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x89 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x8a */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x8b */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x8c */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x8d */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x8e */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x8f */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x90 */ kKeyNumLock, kKeyNumLock, // VK_NUMLOCK
|
|
|
|
|
/* 0x91 */ kKeyScrollLock, kKeyNone, // VK_SCROLL
|
|
|
|
|
/* 0x92 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x93 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x94 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x95 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x96 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x97 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x98 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x99 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x9a */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x9b */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x9c */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x9d */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x9e */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0x9f */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xa0 */ kKeyShift_L, kKeyShift_L, // VK_LSHIFT
|
|
|
|
|
/* 0xa1 */ kKeyShift_R, kKeyShift_R, // VK_RSHIFT
|
|
|
|
|
/* 0xa2 */ kKeyControl_L, kKeyControl_L, // VK_LCONTROL
|
|
|
|
|
/* 0xa3 */ kKeyControl_R, kKeyControl_R, // VK_RCONTROL
|
|
|
|
|
/* 0xa4 */ kKeyAlt_L, kKeyAlt_L, // VK_LMENU
|
|
|
|
|
/* 0xa5 */ kKeyAlt_R, kKeyAlt_R, // VK_RMENU
|
|
|
|
|
/* 0xa6 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xa7 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xa8 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xa9 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xaa */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xab */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xac */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xad */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xae */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xaf */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb0 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb1 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb2 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb3 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb4 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb5 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb6 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb7 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb8 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xb9 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xba */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbb */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbc */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbd */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbe */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xbf */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xc0 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xc1 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xc2 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xc3 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xc4 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xc5 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xc6 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xc7 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xc8 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xc9 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xca */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xcb */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xcc */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xcd */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xce */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xcf */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd0 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd1 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd2 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd3 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd4 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd5 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd6 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd7 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd8 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xd9 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xda */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xdb */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xdc */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xdd */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xde */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xdf */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe0 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe1 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe2 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe3 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe4 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe5 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xe6 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xe7 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xe8 */ kKeyNone, kKeyNone, // unassigned
|
|
|
|
|
/* 0xe9 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xea */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xeb */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xec */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xed */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xee */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xef */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf0 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf1 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf2 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf3 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf4 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf5 */ kKeyNone, kKeyNone, // OEM specific
|
|
|
|
|
/* 0xf6 */ kKeyNone, kKeyNone, // VK_ATTN
|
|
|
|
|
/* 0xf7 */ kKeyNone, kKeyNone, // VK_CRSEL
|
|
|
|
|
/* 0xf8 */ kKeyNone, kKeyNone, // VK_EXSEL
|
|
|
|
|
/* 0xf9 */ kKeyNone, kKeyNone, // VK_EREOF
|
|
|
|
|
/* 0xfa */ kKeyNone, kKeyNone, // VK_PLAY
|
|
|
|
|
/* 0xfb */ kKeyNone, kKeyNone, // VK_ZOOM
|
|
|
|
|
/* 0xfc */ kKeyNone, kKeyNone, // reserved
|
|
|
|
|
/* 0xfd */ kKeyNone, kKeyNone, // VK_PA1
|
|
|
|
|
/* 0xfe */ kKeyNone, kKeyNone, // VK_OEM_CLEAR
|
|
|
|
|
/* 0xff */ kKeyNone, kKeyNone // reserved
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
KeyID
|
|
|
|
|
@@ -918,68 +920,22 @@ CMSWindowsPrimaryScreen::mapKey(
|
|
|
|
|
if ((m_keys[VK_SCROLL] & 0x01) != 0) {
|
|
|
|
|
mask |= KeyModifierScrollLock;
|
|
|
|
|
}
|
|
|
|
|
if ((mask & (KeyModifierControl | KeyModifierAlt)) ==
|
|
|
|
|
(KeyModifierControl | KeyModifierAlt)) {
|
|
|
|
|
// ctrl+alt => AltGr on windows
|
|
|
|
|
mask |= KeyModifierModeSwitch;
|
|
|
|
|
mask &= ~(KeyModifierControl | KeyModifierAlt);
|
|
|
|
|
}
|
|
|
|
|
*maskOut = mask;
|
|
|
|
|
log((CLOG_DEBUG2 "key in vk=%d info=0x%08x mask=0x%04x", vkCode, info, mask));
|
|
|
|
|
|
|
|
|
|
// get the scan code
|
|
|
|
|
UINT scanCode = static_cast<UINT>((info & 0xff0000) >> 16);
|
|
|
|
|
|
|
|
|
|
// convert virtual key to one that distinguishes between left and
|
|
|
|
|
// right for keys that have left/right versions. known scan codes
|
|
|
|
|
// that don't have left/right versions are passed through unchanged.
|
|
|
|
|
// unknown scan codes return 0.
|
|
|
|
|
UINT vkCode2 = MapVirtualKey(scanCode, 3);
|
|
|
|
|
|
|
|
|
|
// work around bug Q72583 (bad num pad conversion in MapVirtualKey())
|
|
|
|
|
if (vkCode >= VK_NUMPAD0 && vkCode <= VK_DIVIDE) {
|
|
|
|
|
vkCode2 = vkCode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MapVirtualKey() appears to map VK_LWIN, VK_RWIN, VK_APPS to
|
|
|
|
|
// some other meaningless virtual key. work around that bug.
|
|
|
|
|
else if (vkCode >= VK_LWIN && vkCode <= VK_APPS) {
|
|
|
|
|
vkCode2 = vkCode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if the original vkCode is VK_SNAPSHOT then use it. oddly enough,
|
|
|
|
|
// some keyboards use the same scan code for keypad multiply and
|
|
|
|
|
// print screen. the difference is that the latter has the extended
|
|
|
|
|
// key flag set. but MapVirtualKey() doesn't seem capable of using
|
|
|
|
|
// that flag.
|
|
|
|
|
else if (vkCode == VK_SNAPSHOT) {
|
|
|
|
|
vkCode2 = vkCode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if MapVirtualKey failed then use original virtual key
|
|
|
|
|
else if (vkCode2 == 0) {
|
|
|
|
|
vkCode2 = vkCode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// sadly, win32 will not distinguish between the left and right
|
|
|
|
|
// control and alt keys using the above function. however, we
|
|
|
|
|
// can check for those: if bit 24 of info is set then the key
|
|
|
|
|
// is a "extended" key, such as the right control and right alt
|
|
|
|
|
// keys.
|
|
|
|
|
if ((info & 0x1000000) != 0) {
|
|
|
|
|
switch (vkCode2) {
|
|
|
|
|
case VK_CONTROL:
|
|
|
|
|
case VK_LCONTROL:
|
|
|
|
|
vkCode2 = VK_RCONTROL;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case VK_MENU:
|
|
|
|
|
case VK_LMENU:
|
|
|
|
|
vkCode2 = VK_RMENU;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// use left/right distinguishing virtual key
|
|
|
|
|
vkCode = vkCode2;
|
|
|
|
|
log((CLOG_DEBUG1 "key vk=%d scan=%d", vkCode, scanCode));
|
|
|
|
|
// get the scan code and the extended keyboard flag
|
|
|
|
|
UINT scanCode = static_cast<UINT>((info & 0x00ff0000u) >> 16);
|
|
|
|
|
int extended = ((info & 0x01000000) == 0) ? 0 : 1;
|
|
|
|
|
log((CLOG_DEBUG1 "key vk=%d ext=%d scan=%d", vkCode, extended, scanCode));
|
|
|
|
|
|
|
|
|
|
// handle some keys via table lookup
|
|
|
|
|
KeyID id = g_virtualKey[vkCode];
|
|
|
|
|
KeyID id = g_virtualKey[vkCode][extended];
|
|
|
|
|
if (id != kKeyNone) {
|
|
|
|
|
return id;
|
|
|
|
|
}
|
|
|
|
|
@@ -989,17 +945,19 @@ CMSWindowsPrimaryScreen::mapKey(
|
|
|
|
|
return kKeyMultiKey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ToAscii() maps ctrl+letter to the corresponding control code
|
|
|
|
|
// and ctrl+backspace to delete. if we've got a control code or
|
|
|
|
|
// delete then do ToAscii() again but without the control state.
|
|
|
|
|
// ToAscii() interprets the control modifier state which we don't
|
|
|
|
|
// want. so save the control state then clear it.
|
|
|
|
|
BYTE lControl = m_keys[VK_LCONTROL];
|
|
|
|
|
BYTE rControl = m_keys[VK_RCONTROL];
|
|
|
|
|
BYTE control = m_keys[VK_CONTROL];
|
|
|
|
|
m_keys[VK_LCONTROL] = 0;
|
|
|
|
|
m_keys[VK_RCONTROL] = 0;
|
|
|
|
|
m_keys[VK_CONTROL] = 0;
|
|
|
|
|
// save the control state then clear it. ToAscii() maps ctrl+letter
|
|
|
|
|
// to the corresponding control code and ctrl+backspace to delete.
|
|
|
|
|
// we don't want that translation so we clear the control modifier
|
|
|
|
|
// state. however, if we want to simulate AltGr (which is ctrl+alt)
|
|
|
|
|
// then we must not clear it.
|
|
|
|
|
BYTE lControl = m_keys[VK_LCONTROL];
|
|
|
|
|
BYTE rControl = m_keys[VK_RCONTROL];
|
|
|
|
|
BYTE control = m_keys[VK_CONTROL];
|
|
|
|
|
if ((mask & KeyModifierModeSwitch) == 0) {
|
|
|
|
|
m_keys[VK_LCONTROL] = 0;
|
|
|
|
|
m_keys[VK_RCONTROL] = 0;
|
|
|
|
|
m_keys[VK_CONTROL] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// convert to ascii
|
|
|
|
|
// FIXME -- support unicode
|
|
|
|
|
@@ -1092,18 +1050,18 @@ CMSWindowsPrimaryScreen::updateKeys()
|
|
|
|
|
|
|
|
|
|
// we only care about the modifier key states. other keys and the
|
|
|
|
|
// mouse buttons should be up.
|
|
|
|
|
m_keys[VK_LSHIFT] = static_cast<BYTE>(GetKeyState(VK_LSHIFT));
|
|
|
|
|
m_keys[VK_RSHIFT] = static_cast<BYTE>(GetKeyState(VK_RSHIFT));
|
|
|
|
|
m_keys[VK_SHIFT] = static_cast<BYTE>(GetKeyState(VK_SHIFT));
|
|
|
|
|
m_keys[VK_LCONTROL] = static_cast<BYTE>(GetKeyState(VK_LCONTROL));
|
|
|
|
|
m_keys[VK_RCONTROL] = static_cast<BYTE>(GetKeyState(VK_RCONTROL));
|
|
|
|
|
m_keys[VK_CONTROL] = static_cast<BYTE>(GetKeyState(VK_CONTROL));
|
|
|
|
|
m_keys[VK_LMENU] = static_cast<BYTE>(GetKeyState(VK_LMENU));
|
|
|
|
|
m_keys[VK_RMENU] = static_cast<BYTE>(GetKeyState(VK_RMENU));
|
|
|
|
|
m_keys[VK_MENU] = static_cast<BYTE>(GetKeyState(VK_MENU));
|
|
|
|
|
m_keys[VK_LWIN] = static_cast<BYTE>(GetKeyState(VK_LWIN));
|
|
|
|
|
m_keys[VK_RWIN] = static_cast<BYTE>(GetKeyState(VK_RWIN));
|
|
|
|
|
m_keys[VK_APPS] = static_cast<BYTE>(GetKeyState(VK_APPS));
|
|
|
|
|
m_keys[VK_LSHIFT] = static_cast<BYTE>(GetKeyState(VK_LSHIFT) & 0x80);
|
|
|
|
|
m_keys[VK_RSHIFT] = static_cast<BYTE>(GetKeyState(VK_RSHIFT) & 0x80);
|
|
|
|
|
m_keys[VK_SHIFT] = static_cast<BYTE>(GetKeyState(VK_SHIFT) & 0x80);
|
|
|
|
|
m_keys[VK_LCONTROL] = static_cast<BYTE>(GetKeyState(VK_LCONTROL) & 0x80);
|
|
|
|
|
m_keys[VK_RCONTROL] = static_cast<BYTE>(GetKeyState(VK_RCONTROL) & 0x80);
|
|
|
|
|
m_keys[VK_CONTROL] = static_cast<BYTE>(GetKeyState(VK_CONTROL) & 0x80);
|
|
|
|
|
m_keys[VK_LMENU] = static_cast<BYTE>(GetKeyState(VK_LMENU) & 0x80);
|
|
|
|
|
m_keys[VK_RMENU] = static_cast<BYTE>(GetKeyState(VK_RMENU) & 0x80);
|
|
|
|
|
m_keys[VK_MENU] = static_cast<BYTE>(GetKeyState(VK_MENU) & 0x80);
|
|
|
|
|
m_keys[VK_LWIN] = static_cast<BYTE>(GetKeyState(VK_LWIN) & 0x80);
|
|
|
|
|
m_keys[VK_RWIN] = static_cast<BYTE>(GetKeyState(VK_RWIN) & 0x80);
|
|
|
|
|
m_keys[VK_APPS] = static_cast<BYTE>(GetKeyState(VK_APPS) & 0x80);
|
|
|
|
|
m_keys[VK_CAPITAL] = static_cast<BYTE>(GetKeyState(VK_CAPITAL));
|
|
|
|
|
m_keys[VK_NUMLOCK] = static_cast<BYTE>(GetKeyState(VK_NUMLOCK));
|
|
|
|
|
m_keys[VK_SCROLL] = static_cast<BYTE>(GetKeyState(VK_SCROLL));
|
|
|
|
|
|