多媒体键盘快捷键实现的原理分析

相信很多读者都用过多媒体键盘,上面有很媒体快捷键,比如:静音、音量调整、媒体控制等
那么这些快捷是怎么实现的呢?
在计算机刚刚发明的时候,键码都是由实体的键盘产生的,后来随着计算机的发展,有很多操作都不是由键盘实体产生了,这时候在Windows中就定义了所谓的虚拟键码(Virtual-Key),用来定义这些操作,比如:鼠标单击

具体虚拟键码可以参考MSDN的定义:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx



多媒体键盘中的媒体快捷键就是在虚拟键码中定义的,当你按下键盘上的快捷键时,键盘就发送相应的虚拟键码到系统,就可以实现媒体控制的功能。


下面我们来做一个小实验,用VBS模拟发送媒体控制的虚拟键码,来实现静音的效果。


CreateObject("wscript.shell").Sendkeys chr(&h88ad)



代码解释
1."&h"——在VBS中表示后面的数是十六进制数
2."88"——因为&h88ad不是一个真正有意义的字符,sendkeys就不会起作用,为了能让sendkeys起作用,我们需要构造一个有意义的字符,加了88以后,有两个字节,也就构成了一个汉字(是GBK里的),那为什么是88呢?因为在MSDN里面定义(0x88-8F)Unassigned,88为开头的字符可以组成有意义的GBK汉字。
2."ad"——参考下面的按键对照表,ad是静音虚拟键码的十六进制表示


双击运行一下试试吧,是不是很神奇?




虚拟键盘对照表:
VK_LBUTTON  (0x01)
Left mouse button
VK_RBUTTON  (0x02)
Right mouse button
VK_CANCEL  (0x03)
Control-break processing
VK_MBUTTON  (0x04)
Middle mouse button (three-button mouse)
VK_XBUTTON1  (0x05)
Windows 2000/XP: X1 mouse button
VK_XBUTTON2  (0x06)
Windows 2000/XP: X2 mouse button
-  (0x07)
Undefined
VK_BACK  (0x08)
BACKSPACE key
VK_TAB  (0x09)
TAB key
-  (0x0A-0B)
Reserved
VK_CLEAR  (0x0C)
CLEAR key
VK_RETURN  (0x0D)
ENTER key
-  (0x0E-0F)
Undefined
VK_SHIFT  (0x10)
SHIFT key
VK_CONTROL  (0x11)
CTRL key
VK_MENU  (0x12)
ALT key
VK_PAUSE  (0x13)
PAUSE key
VK_CAPITAL  (0x14)
CAPS LOCK key
VK_KANA  (0x15)
Input Method Editor (IME) Kana mode
VK_HANGUEL  (0x15)
IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
VK_HANGUL  (0x15)
IME Hangul mode
-  (0x16)
Undefined
VK_JUNJA  (0x17)
IME Junja mode
VK_FINAL  (0x18)
IME final mode
VK_HANJA  (0x19)
IME Hanja mode
VK_KANJI  (0x19)
IME Kanji mode
-  (0x1A)
Undefined
VK_ESCAPE  (0x1B)
ESC key
VK_CONVERT  (0x1C)
IME convert
VK_NONCONVERT  (0x1D)
IME nonconvert
VK_ACCEPT  (0x1E)
IME accept
VK_MODECHANGE  (0x1F)
IME mode change request
VK_SPACE  (0x20)
SPACEBAR
VK_PRIOR  (0x21)
PAGE UP key
VK_NEXT  (0x22)
PAGE DOWN key
VK_END  (0x23)
END key
VK_HOME  (0x24)
HOME key
VK_LEFT  (0x25)
LEFT ARROW key
VK_UP  (0x26)
UP ARROW key
VK_RIGHT  (0x27)
RIGHT ARROW key
VK_DOWN  (0x28)
DOWN ARROW key
VK_SELECT  (0x29)
SELECT key
VK_PRINT  (0x2A)
PRINT key
VK_EXECUTE  (0x2B)
EXECUTE key
VK_SNAPSHOT  (0x2C)
PRINT SCREEN key
VK_INSERT  (0x2D)
INS key
VK_DELETE  (0x2E)
DEL key
VK_HELP  (0x2F)
HELP key
 (0x30)
0 key
 (0x31)
1 key
 (0x32)
2 key
 (0x33)
3 key
 (0x34)
4 key
 (0x35)
5 key
 (0x36)
6 key
 (0x37)
7 key
 (0x38)
8 key
 (0x39)
9 key
-  (0x3A-40)
Undefined
 (0x41)
A key
 (0x42)
B key
 (0x43)
C key
 (0x44)
D key
 (0x45)
E key
 (0x46)
F key
 (0x47)
G key
 (0x48)
H key
 (0x49)
I key
 (0x4A)
J key
 (0x4B)
K key
 (0x4C)
L key
 (0x4D)
M key
 (0x4E)
N key
 (0x4F)
O key
 (0x50)
P key
 (0x51)
Q key
 (0x52)
R key
 (0x53)
S key
 (0x54)
T key
 (0x55)
U key
 (0x56)
V key
 (0x57)
W key
 (0x58)
X key
 (0x59)
Y key
 (0x5A)
Z key
VK_LWIN  (0x5B)
Left Windows key (Microsoft Natural keyboard)
VK_RWIN  (0x5C)
Right Windows key (Natural keyboard)
VK_APPS  (0x5D)
Applications key (Natural keyboard)
-  (0x5E)
Reserved
VK_SLEEP  (0x5F)
Computer Sleep key
VK_NUMPAD0  (0x60)
Numeric keypad 0 key
VK_NUMPAD1  (0x61)
Numeric keypad 1 key
VK_NUMPAD2  (0x62)
Numeric keypad 2 key
VK_NUMPAD3  (0x63)
Numeric keypad 3 key
VK_NUMPAD4  (0x64)
Numeric keypad 4 key
VK_NUMPAD5  (0x65)
Numeric keypad 5 key
VK_NUMPAD6  (0x66)
Numeric keypad 6 key
VK_NUMPAD7  (0x67)
Numeric keypad 7 key
VK_NUMPAD8  (0x68)
Numeric keypad 8 key
VK_NUMPAD9  (0x69)
Numeric keypad 9 key
VK_MULTIPLY  (0x6A)
Multiply key
VK_ADD  (0x6B)
Add key
VK_SEPARATOR  (0x6C)
Separator key
VK_SUBTRACT  (0x6D)
Subtract key
VK_DECIMAL  (0x6E)
Decimal key
VK_DIVIDE  (0x6F)
Divide key
VK_F1  (0x70)
F1 key
VK_F2  (0x71)
F2 key
VK_F3  (0x72)
F3 key
VK_F4  (0x73)
F4 key
VK_F5  (0x74)
F5 key
VK_F6  (0x75)
F6 key
VK_F7  (0x76)
F7 key
VK_F8  (0x77)
F8 key
VK_F9  (0x78)
F9 key
VK_F10  (0x79)
F10 key
VK_F11  (0x7A)
F11 key
VK_F12  (0x7B)
F12 key
VK_F13  (0x7C)
F13 key
VK_F14  (0x7D)
F14 key
VK_F15  (0x7E)
F15 key
VK_F16  (0x7F)
F16 key
VK_F17  (0x80H)
F17 key
VK_F18  (0x81H)
F18 key
VK_F19  (0x82H)
F19 key
VK_F20  (0x83H)
F20 key
VK_F21  (0x84H)
F21 key
VK_F22  (0x85H)
F22 key
VK_F23  (0x86H)
F23 key
VK_F24  (0x87H)
F24 key
-  (0x88-8F)
Unassigned
VK_NUMLOCK  (0x90)
NUM LOCK key
VK_SCROLL  (0x91)
SCROLL LOCK key
 (0x92-96)
OEM specific
-  (0x97-9F)
Unassigned
VK_LSHIFT  (0xA0)
Left SHIFT key
VK_RSHIFT  (0xA1)
Right SHIFT key
VK_LCONTROL  (0xA2)
Left CONTROL key
VK_RCONTROL  (0xA3)
Right CONTROL key
VK_LMENU  (0xA4)
Left MENU key
VK_RMENU  (0xA5)
Right MENU key
VK_BROWSER_BACK  (0xA6)
Windows 2000/XP: Browser Back key
VK_BROWSER_FORWARD  (0xA7)
Windows 2000/XP: Browser Forward key
VK_BROWSER_REFRESH  (0xA8)
Windows 2000/XP: Browser Refresh key
VK_BROWSER_STOP  (0xA9)
Windows 2000/XP: Browser Stop key
VK_BROWSER_SEARCH  (0xAA)
Windows 2000/XP: Browser Search key
VK_BROWSER_FAVORITES  (0xAB)
Windows 2000/XP: Browser Favorites key
VK_BROWSER_HOME  (0xAC)
Windows 2000/XP: Browser Start and Home key
VK_VOLUME_MUTE  (0xAD)
Windows 2000/XP: Volume Mute key
VK_VOLUME_DOWN  (0xAE)
Windows 2000/XP: Volume Down key
VK_VOLUME_UP  (0xAF)
Windows 2000/XP: Volume Up key
VK_MEDIA_NEXT_TRACK  (0xB0)
Windows 2000/XP: Next Track key
VK_MEDIA_PREV_TRACK  (0xB1)
Windows 2000/XP: Previous Track key
VK_MEDIA_STOP  (0xB2)
Windows 2000/XP: Stop Media key
VK_MEDIA_PLAY_PAUSE  (0xB3)
Windows 2000/XP: Play/Pause Media key
VK_LAUNCH_MAIL  (0xB4)
Windows 2000/XP: Start Mail key
VK_LAUNCH_MEDIA_SELECT  (0xB5)
Windows 2000/XP: Select Media key
VK_LAUNCH_APP1  (0xB6)
Windows 2000/XP: Start Application 1 key //其实就是我的电脑
VK_LAUNCH_APP2  (0xB7)
Windows 2000/XP: Start Application 2 key //其实就是计算器
-  (0xB8-B9)
Reserved
VK_OEM_1  (0xBA)
Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the ';:' key
VK_OEM_PLUS  (0xBB)
Windows 2000/XP: For any country/region, the '+' key
VK_OEM_COMMA  (0xBC)
Windows 2000/XP: For any country/region, the ',' key
VK_OEM_MINUS  (0xBD)
Windows 2000/XP: For any country/region, the '-' key
VK_OEM_PERIOD  (0xBE)
Windows 2000/XP: For any country/region, the '.' key
VK_OEM_2  (0xBF)
Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the '/?' key
VK_OEM_3  (0xC0)
Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the '`~' key
-  (0xC1-D7)
Reserved
-  (0xD8-DA)
Unassigned
VK_OEM_4  (0xDB)
Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the '[{' key
VK_OEM_5  (0xDC)
Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the '\|' key
VK_OEM_6  (0xDD)
Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the ']}' key
VK_OEM_7  (0xDE)
Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key
VK_OEM_8  (0xDF)
Used for miscellaneous characters; it can vary by keyboard.
-  (0xE0)
Reserved
 (0xE1)
OEM specific
VK_OEM_102  (0xE2)
Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
 (0xE3-E4)
OEM specific
VK_PROCESSKEY  (0xE5)
Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
 (0xE6)
OEM specific
VK_PACKET  (0xE7)
Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
-  (0xE8)
Unassigned
 (0xE9-F5)
OEM specific
VK_ATTN  (0xF6)
Attn key
VK_CRSEL  (0xF7)
CrSel key
VK_EXSEL  (0xF8)
ExSel key
VK_EREOF  (0xF9)
Erase EOF key
VK_PLAY  (0xFA)
Play key
VK_ZOOM  (0xFB)
Zoom key
VK_NONAME  (0xFC)
Reserved
VK_PA1  (0xFD)
PA1 key
VK_OEM_CLEAR  (0xFE)
Clear key
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过监听键盘事件来实现键盘快捷键的功能,同时也可以通过监听 table 的单元格编辑事件来判断当前编辑的单元格位置,从而实现切换单元格编辑的功能。 具体实现方式如下: 1. 监听键盘事件,当按下 Tab 键时,判断当前正在编辑的单元格位置,然后切换到下一个单元格进行编辑。 ``` // 监听键盘事件 $(document).keydown(function (e) { // 判断是否按下了 Tab 键 if (e.keyCode === 9) { // 阻止默认事件 e.preventDefault(); // 获取当前编辑的单元格位置 var editIndex = $('table').find('.layui-table-edit').parent().index(); // 切换到下一个单元格进行编辑 $('table').find('td:eq(' + (editIndex + 1) + ')').trigger('click'); } }); ``` 2. 监听 table 的单元格编辑事件,当单元格进入编辑状态时,添加一个 class 名称用于标记当前正在编辑的单元格。 ``` // 监听 table 的单元格编辑事件 table.on('edit(test)', function(obj){ // 添加 class 名称用于标记当前正在编辑的单元格 $(obj.tr).find('td:eq('+obj.field+')').addClass('layui-table-edit'); }); ``` 3. 监听 table 的单元格编辑结束事件,当结束编辑时,移除用于标记的 class 名称。 ``` // 监听 table 的单元格编辑结束事件 table.on('tool(test)', function(obj){ // 移除用于标记的 class 名称 $(obj.tr).find('.layui-table-edit').removeClass('layui-table-edit'); }); ``` 通过以上三个步骤的组合,可以实现键盘快捷键切换单元格编辑的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值