📄 kbd.h
字号:
//
#define NLSKBD_INFO_SEND_IME_NOTIFICATION 0x0001
//
// If this flag is on, System will use VK_HOME/VK_KANA instead of
// VK_NUMLOCK/VK_SCROLL for Accessibility toggle keys.
// + Typically, NEC PC-9800 Series will use this bit, because
// they does not have 'NumLock' and 'ScrollLock' keys.
//
#define NLSKBD_INFO_ACCESSIBILITY_KEYMAP 0x0002
//
// If this flag is on, System will return 101 or 106 Japanese
// keyboard type/subtype id, when GetKeyboardType() is called.
//
#define NLSKBD_INFO_EMURATE_101_KEYBOARD 0x0010
#define NLSKBD_INFO_EMURATE_106_KEYBOARD 0x0020
//
// Keyboard layout function types
//
// - VK_F.NLSFEProcType
//
#define KBDNLS_TYPE_NULL 0
#define KBDNLS_TYPE_NORMAL 1
#define KBDNLS_TYPE_TOGGLE 2
//
// - VK_F.NLSFEProcCurrent
//
#define KBDNLS_INDEX_NORMAL 1
#define KBDNLS_INDEX_ALT 2
//
// - VK_F.NLSFEProc[]
//
#define KBDNLS_NULL 0 // Invalid function
#define KBDNLS_NOEVENT 1 // Drop keyevent
#define KBDNLS_SEND_BASE_VK 2 // Send Base VK_xxx
#define KBDNLS_SEND_PARAM_VK 3 // Send Parameter VK_xxx
#define KBDNLS_KANALOCK 4 // VK_KANA (with hardware lock)
#define KBDNLS_ALPHANUM 5 // VK_DBE_ALPHANUMERIC
#define KBDNLS_HIRAGANA 6 // VK_DBE_HIRAGANA
#define KBDNLS_KATAKANA 7 // VK_DBE_KATAKANA
#define KBDNLS_SBCSDBCS 8 // VK_DBE_SBCSCHAR/VK_DBE_DBCSCHAR
#define KBDNLS_ROMAN 9 // VK_DBE_ROMAN/VK_DBE_NOROMAN
#define KBDNLS_CODEINPUT 10 // VK_DBE_CODEINPUT/VK_DBE_NOCODEINPUT
#define KBDNLS_HELP_OR_END 11 // VK_HELP or VK_END [NEC PC-9800 Only]
#define KBDNLS_HOME_OR_CLEAR 12 // VK_HOME or VK_CLEAR [NEC PC-9800 Only]
#define KBDNLS_NUMPAD 13 // VK_NUMPAD? for Numpad key [NEC PC-9800 Only]
#define KBDNLS_KANAEVENT 14 // VK_KANA [Fujitsu FMV oyayubi Only]
#define KBDNLS_CONV_OR_NONCONV 15 // VK_CONVERT and VK_NONCONVERT [Fujitsu FMV oyayubi Only]
#define JAPANESE_KEYBOARD(Id) ((Id).Type == KEYBOARD_TYPE_JAPAN)
#define KOREAN_KEYBOARD(Id) ((Id).Type == KEYBOARD_TYPE_KOREA)
// Fujitsu Oyayubi-shift keyboard
#define FUJITSU_KBD_CONSOLE(Id) (JAPANESE_KEYBOARD(Id) && \
(Id).Subtype == ((NLSKBD_OEM_FUJITSU<<4)|FMV_KBD_OASYS_TYPE))
// This number 0x00020002 is registered in registry key as
// HKLM\System\CurrentControlSet\Control\Terminal Server\KeyboardType Mapping\JPN
#define FUJITSU_KBD_REMOTE(Id) (JAPANESE_KEYBOARD(Id) && \
(Id).SubType == 0x00020002)
#define KBD_LAYOUT_LANG(hkl) (PRIMARYLANGID(HandleToUlong(hkl)))
#define JAPANESE_KBD_LAYOUT(hkl) (KBD_LAYOUT_LANG(hkl) == LANG_JAPANESE)
#define KOREAN_KBD_LAYOUT(hkl) (KBD_LAYOUT_LANG(hkl) == LANG_KOREAN)
// end of FE specific
/***************************************************************************\
* Macros for ausVK[] values (used below)
*
* These macros prefix each argument with VK_ to produce the name of a Virtual
* Key defined in "winuser.h" (eg: ESCAPE becomes VK_ESCAPE).
\***************************************************************************/
#ifndef KBD_TYPE
#define KBD_TYPE 4
#endif
/*
* _NE() selects the Virtual Key according to keyboard type
*/
#if (KBD_TYPE == 1)
#define _NE(v1,v2,v3,v4,v5,v6) (VK_##v1)
#elif (KBD_TYPE == 2)
#define _NE(v1,v2,v3,v4,v5,v6) (VK_##v2)
#elif (KBD_TYPE == 3)
#define _NE(v1,v2,v3,v4,v5,v6) (VK_##v3)
#elif (KBD_TYPE == 4)
#define _NE(v1,v2,v3,v4,v5,v6) (VK_##v4)
#elif (KBD_TYPE == 5)
#define _NE(v1,v2,v3,v4,v5,v6) (VK_##v5)
#elif (KBD_TYPE == 6)
#define _NE(v1,v2,v3,v4,v5,v6) (VK_##v6)
#elif (KBD_TYPE == 7)
#define _NE(v7,v8,v16,v10,v11,v12,v13) (VK_##v7)
#elif (KBD_TYPE == 8)
#define _NE(v7,v8,v16,v10,v11,v12,v13) (VK_##v8)
#elif (KBD_TYPE == 10)
#define _NE(v7,v8,v16,v10,v11,v12,v13) (VK_##v10)
#elif (KBD_TYPE == 11)
#define _NE(v7,v8,v16,v10,v11,v12,v13) (VK_##v11)
#elif (KBD_TYPE == 12)
#define _NE(v7,v8,v16,v10,v11,v12,v13) (VK_##v12)
#elif (KBD_TYPE == 13)
#define _NE(v7,v8,v16,v10,v11,v12,v13) (VK_##v13)
#elif (KBD_TYPE == 16)
#define _NE(v7,v8,v16,v10,v11,v12,v13) (VK_##v16)
#elif (KBD_TYPE == 20)
#define _NE(v20,v21,v22) (VK_##v20)
#elif (KBD_TYPE == 21)
#define _NE(v20,v21,v22) (VK_##v21)
#elif (KBD_TYPE == 22)
#define _NE(v20,v21,v22) (VK_##v22)
#elif (KBD_TYPE == 30)
#define _NE(v30,v33,v34) (VK_##v30)
#elif (KBD_TYPE == 33)
#define _NE(v30,v33,v34) (VK_##v33)
#elif (KBD_TYPE == 34)
#define _NE(v30,v33,v34) (VK_##v34)
#elif (KBD_TYPE == 40)
#define _NE(v40,v41) (VK_##v40)
#elif (KBD_TYPE == 41)
#define _NE(v40,v41) (VK_##v41)
#endif
/*
* _EQ() selects the same Virtual Key for all keyboard types
*/
#if (KBD_TYPE <= 6)
#define _EQ( v4 ) (VK_##v4)
#elif (KBD_TYPE >= 7) && (KBD_TYPE <= 16)
#define _EQ( v8 ) (VK_##v8)
#elif (KBD_TYPE > 20) && (KBD_TYPE <= 22)
#define _EQ(v20 ) (VK_##v20)
#elif (KBD_TYPE >= 30) && (KBD_TYPE <= 34)
#define _EQ( v30 ) (VK_##v30)
#elif (KBD_TYPE == 37)
#define _EQ( v37 ) (VK_##v37)
#elif (KBD_TYPE >= 40) && (KBD_TYPE <= 41)
#define _EQ( v40 ) (VK_##v40)
#endif
/*
* A bit of trickery for virtual key names 'A' to 'Z' and '0' to '9' so
* that they are not converted to a VK_* name.
* With this macro, VK_'A' equates to 'A' etc.
*/
#define VK_
#define VK__none_ 0xFF
#define VK_ABNT_C1 0xC1
#define VK_ABNT_C2 0xC2
#if (KBD_TYPE <= 6)
/***************************************************************************\
* T** - Values for ausVK[] (Virtual Scan Code to Virtual Key conversion)
*
* These values are for Scancode Set 3 and the USA.
* Other languages substitute their own values where required (files kbd**.h)
*
* Six sets of keyboards are supported, according to KBD_TYPE:
*
* KBD_TYPE Keyboard (examples)
* ======== =======================================================
* 1 AT&T '301' & '302'; Olivetti 83-key; PC-XT 84-key; etc.
* 2 Olivetti M24 102-key
* 3 HP Vectra (DIN); Olivetti 86-key; etc.
* 4 * Enhanced 101/102-key; Olivetti A; etc.
* 5 Nokia (Ericsson) type 5 (1050, etc.)
* 6 Nokia (Ericsson) type 6 (9140)
*
* * If KBD_TYPE is not defined, the default is type 4.
*
* KB3270 comments refers to KB 3270 keyboards in native emulation mode (DIP
* switches all OFF), and the Scancode Map used to convert its scancodes to
* standard scancode set 1.
* KB3270 <= 57 - this entry is reached by mapping from scancode 0x57
* to an arbitrary scancode: the VK is what counts
* KB3270 => HOME - this scancode is mapped to the scancode for VK_HOME
* KB3270 - no mapping involved, a scancode for KB3270 only
*
* _EQ() : all keyboard types have the same virtual key for this scancode
* _NE() : different virtual keys for this scancode, depending on kbd type
*
* +------+ +--------+--------+--------+--------+--------+--------+
* | Scan | | kbd | kbd | kbd | kbd | kbd | kbd |
* | code | | type 1 | type 2 | type 3 | type 4 | type 5 | type 6 |
\****+-------+-+--------+--------+--------+--------+--------+--------+******/
#define T00 _EQ( _none_ )
#define T01 _EQ( ESCAPE )
#define T02 _EQ( '1' )
#define T03 _EQ( '2' )
#define T04 _EQ( '3' )
#define T05 _EQ( '4' )
#define T06 _EQ( '5' )
#define T07 _EQ( '6' )
#define T08 _EQ( '7' )
#define T09 _EQ( '8' )
#define T0A _EQ( '9' )
#define T0B _EQ( '0' )
#define T0C _EQ( OEM_MINUS )
#define T0D _NE(OEM_PLUS,OEM_4, OEM_PLUS,OEM_PLUS,OEM_PLUS,OEM_PLUS)
#define T0E _EQ( BACK )
#define T0F _EQ( TAB )
#define T10 _EQ( 'Q' )
#define T11 _EQ( 'W' )
#define T12 _EQ( 'E' )
#define T13 _EQ( 'R' )
#define T14 _EQ( 'T' )
#define T15 _EQ( 'Y' )
#define T16 _EQ( 'U' )
#define T17 _EQ( 'I' )
#define T18 _EQ( 'O' )
#define T19 _EQ( 'P' )
#define T1A _NE(OEM_4, OEM_6, OEM_4, OEM_4, OEM_4, OEM_4 )
#define T1B _NE(OEM_6, OEM_1, OEM_6, OEM_6, OEM_6, OEM_6 )
#define T1C _EQ( RETURN )
#define T1D _EQ( LCONTROL )
#define T1E _EQ( 'A' )
#define T1F _EQ( 'S' )
#define T20 _EQ( 'D' )
#define T21 _EQ( 'F' )
#define T22 _EQ( 'G' )
#define T23 _EQ( 'H' )
#define T24 _EQ( 'J' )
#define T25 _EQ( 'K' )
#define T26 _EQ( 'L' )
#define T27 _NE(OEM_1, OEM_PLUS,OEM_1, OEM_1, OEM_1, OEM_1 )
#define T28 _NE(OEM_7, OEM_3, OEM_7, OEM_7, OEM_3, OEM_3 )
#define T29 _NE(OEM_3, OEM_7, OEM_3, OEM_3, OEM_7, OEM_7 )
#define T2A _EQ( LSHIFT )
#define T2B _EQ( OEM_5 )
#define T2C _EQ( 'Z' )
#define T2D _EQ( 'X' )
#define T2E _EQ( 'C' )
#define T2F _EQ( 'V' )
#define T30 _EQ( 'B' )
#define T31 _EQ( 'N' )
#define T32 _EQ( 'M' )
#define T33 _EQ( OEM_COMMA )
#define T34 _EQ( OEM_PERIOD )
#define T35 _EQ( OEM_2 )
#define T36 _EQ( RSHIFT )
#define T37 _EQ( MULTIPLY )
#define T38 _EQ( LMENU )
#define T39 _EQ( ' ' )
#define T3A _EQ( CAPITAL )
#define T3B _EQ( F1 )
#define T3C _EQ( F2 )
#define T3D _EQ( F3 )
#define T3E _EQ( F4 )
#define T3F _EQ( F5 )
#define T40 _EQ( F6 )
#define T41 _EQ( F7 )
#define T42 _EQ( F8 )
#define T43 _EQ( F9 )
#define T44 _EQ( F10 )
#define T45 _EQ( NUMLOCK )
#define T46 _EQ( SCROLL )
#define T47 _EQ( HOME )
#define T48 _EQ( UP )
#define T49 _EQ( PRIOR )
#define T4A _EQ( SUBTRACT )
#define T4B _EQ( LEFT )
#define T4C _EQ( CLEAR )
#define T4D _EQ( RIGHT )
#define T4E _EQ( ADD )
#define T4F _EQ( END )
#define T50 _EQ( DOWN )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -