键盘按键编码

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“<换行>”,即“/n”;Windows系统里面,每行结尾是“<换行><回车>”,即“/n/r”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

当用户按下某个键时,
' 1.键盘会检测到这个动作,并通过键盘控制器把扫描码(scan code)传送到计算机;
'       键盘扫描码跟具体的硬件有关的,不同厂商对同一个键的扫描码有可能不同。
' 2.计算机接收到扫描码后,将其交给键盘驱动程序;
' 3.键盘驱动程序把这个扫描码转换为键盘虚拟码;
'       虚拟码与具体硬件无关,不同厂商的键盘,同一个键的虚拟码总是相同的。
' 3.然后,键盘驱动程序把该键盘操作的扫描码和虚拟码以及其它信息传递给操作系统;
' 4.操作系统将获得的信息封装在一个键盘消息中,并把该键盘消息插入到消息列队。
' 5.通过Windows的消息系统,该键盘消息被送到某个窗口中;
' 6.窗口所在的应用程序接收到消息后,可以了解到有关键盘操作的信息,然后决定作出一定的响应

http://wenku.baidu.com/view/4ab9e23a87c24028915fc339.html

public struct KBDLLHOOKSTRUCT
        {
            public int vkCode;
            int scanCode;
            public int flags;
            int time;
            int dwExtraInfo;
        }

lParam: 总长4字节,32位
'0–15位:用于指定当前消息的重复次数。当用户按下某个键持续一段时间的话,
'       该值是自动计数的按下某键的次数;若按键时间很长,则会发出多个消息,
'       且重复次数不会累计
'16–23:指定扫描码
'24:指定是否该键是一个扩展键(如alt、ctrl),若值为1表示是扩展键,否则其值为0
'25–28:保留
'29:指定上下文环境码。对于WM_KEYDOWN、WM_KEYUP消息,其值总为0,
'        对WM_CHAR消息,如果同时alt键被按下,则值为1,否则值为0.
'30:指定前键状态。如果消息发送前该键是按下状态,其值为1,否则为0
'31:指定转换状态,对于WM_KEYDOWN,其值总为0;
'       对于WM_CHAR,如果该键被释放,则其值为1,否则为0.

 
 附

虚拟键码 对应值 对应键
VK_LBUTTON1鼠标左键
VK_RBUTTON2鼠标右键
VK_CANCEL3Cancel
VK_MBUTTON4鼠标中键
VK_XBUTTON15 
VK_XBUTTON26 
VK_BACK8Backspace
VK_TAB9Tab
VK_CLEAR12Clear
VK_RETURN13Enter
VK_SHIFT16Shift
VK_CONTROL17Ctrl
VK_MENU18Alt
VK_PAUSE19Pause
VK_CAPITAL20Caps Lock
VK_KANA21 
VK_HANGUL21 
VK_JUNJA23 
VK_FINAL24 
VK_HANJA25 
VK_KANJI25* 
VK_ESCAPE27Esc
VK_CONVERT28 
VK_NONCONVERT29 
VK_ACCEPT30 
VK_MODECHANGE31 
VK_SPACE32Space
VK_PRIOR33Page Up
VK_NEXT34Page Down
VK_END35End
VK_HOME36Home
VK_LEFT37Left Arrow
VK_UP38Up Arrow
VK_RIGHT39Right Arrow
VK_DOWN40Down Arrow
VK_SELECT41Select
VK_PRINT42Print
VK_EXECUTE43Execute
VK_SNAPSHOT44Snapshot
VK_INSERT45Insert
VK_DELETE46Delete
VK_HELP47Help
 480
 491
 502
 513
 524
 535
 546
 557
 568
 579
 65A
 66B
 67C
 68D
 69E
 70F
 71G
 72H
 73I
 74J
 75K
 76L
 77M
 78N
 79O
 80P
 81Q
 82R
 83S
 84T
 85U
 86V
 87W
 88X
 89Y
 90Z
VK_LWIN91 
VK_RWIN92 
VK_APPS93 
VK_SLEEP95 
VK_NUMPAD096小键盘 0
VK_NUMPAD197小键盘 1
VK_NUMPAD298小键盘 2
VK_NUMPAD399小键盘 3
VK_NUMPAD4100小键盘 4
VK_NUMPAD5101小键盘 5
VK_NUMPAD6102小键盘 6
VK_NUMPAD7103小键盘 7
VK_NUMPAD8104小键盘 8
VK_NUMPAD9105小键盘 9
VK_MULTIPLY106小键盘 *
VK_ADD107小键盘 +
VK_SEPARATOR108小键盘 Enter
VK_SUBTRACT109小键盘 -
VK_DECIMAL110小键盘 .
VK_DIVIDE111小键盘 /
VK_F1112F1
VK_F2113F2
VK_F3114F3
VK_F4115F4
VK_F5116F5
VK_F6117F6
VK_F7118F7
VK_F8119F8
VK_F9120F9
VK_F10121F10
VK_F11122F11
VK_F12123F12
VK_F13124 
VK_F14125 
VK_F15126 
VK_F16127 
VK_F17128 
VK_F18129 
VK_F19130 
VK_F20131 
VK_F21132 
VK_F22133 
VK_F23134 
VK_F24135 
VK_NUMLOCK144Num Lock
VK_SCROLL145Scroll
VK_LSHIFT160 
VK_RSHIFT161 
VK_LCONTROL162 
VK_RCONTROL163 
VK_LMENU164 
VK_RMENU165 
VK_BROWSER_BACK166 
VK_BROWSER_FORWARD167 
VK_BROWSER_REFRESH168 
VK_BROWSER_STOP169 
VK_BROWSER_SEARCH170 
VK_BROWSER_FAVORITES171 
VK_BROWSER_HOME172 
VK_VOLUME_MUTE173VolumeMute
VK_VOLUME_DOWN174VolumeDown
VK_VOLUME_UP175VolumeUp
VK_MEDIA_NEXT_TRACK176 
VK_MEDIA_PREV_TRACK177 
VK_MEDIA_STOP178 
VK_MEDIA_PLAY_PAUSE179 
VK_LAUNCH_MAIL180 
VK_LAUNCH_MEDIA_SELECT181 
VK_LAUNCH_APP1182 
VK_LAUNCH_APP2183 
VK_OEM_1186; :
VK_OEM_PLUS187= +
VK_OEM_COMMA188 
VK_OEM_MINUS189- _
VK_OEM_PERIOD190 
VK_OEM_2191/ ?
VK_OEM_3192` ~
VK_OEM_4219[ {
VK_OEM_5220/ |
VK_OEM_6221] }
VK_OEM_7222' "
VK_OEM_8223 
VK_OEM_102226 
VK_PACKET231 
VK_PROCESSKEY229 
VK_ATTN246 
VK_CRSEL247 
VK_EXSEL248 
VK_EREOF249 
VK_PLAY250 
VK_ZOOM251 
VK_NONAME252 
VK_PA1253 
VK_OEM_CLEAR254

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值