
documentgetElementById('id选择器')keyup(function(e)){
ekeyCode
}
ekeyCode:这个就是获取的键码值
你也可以搜索键码值,每个键盘都有对应的
<div id=test contenteditable=true></div>
<script>
windowonload=function(){
documentgetElementById("test")onkeydown=function(e){
//当前元素是(e||event)currentTarget
consolelog((e||event)currentTarget);
//标签名称是(e||event)currentTargettagName
consolelog((e||event)currentTargettagName);
}
}
</script>
梢允褂玫撞慵�坦匙� #include "windowsh" // 回调函数指针typedef BOOL (CALLBACK LPFNKEYBOARDPROC)(WPARAM, KBDLLHOOKSTRUCT); // 全局变量LPDWORD g_lpdwVirtualKey = NULL; // Keycode 数组的指针int g_nLength = 0; // Keycode 数组的大小BOOL g_bDisableKeyboard = FALSE; // 是否屏蔽整个键盘HINSTANCE g_hInstance = NULL; // 模块实例句柄HHOOK g_hHook = NULL; // 钩子句柄LPFNKEYBOARDPROC g_lpfnKeyboardProc; // 键盘钩子回调函数指针 // DLL 入口函数BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){ // 保存模块实例句柄 g_hInstance = (HINSTANCE)hModule; // 在进程结束或线程结束时卸载钩子 switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: break; case DLL_PROCESS_DETACH: case DLL_THREAD_DETACH: free(g_lpdwVirtualKey); if (g_hHook != NULL) UnhookWindowsHookEx(g_hHook); break; } return TRUE;} // 底层键盘钩子函数LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam){ // 拦截键盘的某些按键, 如果 g_bDisableKeyboard 为 TRUE 则拦截整个键盘按键if (nCode >= HC_ACTION) { KBDLLHOOKSTRUCT pStruct = (KBDLLHOOKSTRUCT)lParam; if (g_bDisableKeyboard) if (g_lpfnKeyboardProc(wParam, pStruct)) return CallNextHookEx(g_hHook, nCode, wParam, lParam); else return true; LPDWORD tmpVirtualKey = g_lpdwVirtualKey; for (int i = 0; i < g_nLength; i++) { if (pStruct->vkCode == tmpVirtualKey++) if (g_lpfnKeyboardProc(wParam, pStruct)) return CallNextHookEx(g_hHook, nCode, wParam, lParam); else return true; } } // 调用系统中的下一个钩子 return CallNextHookEx(g_hHook, nCode, wParam, lParam);} /// 开始拦截键盘按键 // // 参数: // lpdwVirtualKey Keycode 数组的指针 // nLength Keycode 数组的大小 // bDisableKeyboard 是否拦截整个键盘 // // 返回值: TRUE 成功, FALSE 失败 ///BOOL WINAPI StartMaskKey(LPDWORD lpdwVirtualKey, int nLength, LPFNKEYBOARDPROC lpfnKeyboardProc, BOOL bDisableKeyboard = FALSE){ // 如果已经安装键盘钩子则返回 FALSE if (g_hHook != NULL || nLength == 0) return FALSE; // 将用户传来的 keycode 数组保存在全局变量中 g_lpdwVirtualKey = (LPDWORD)malloc(sizeof(DWORD) nLength); LPDWORD tmpVirtualKey = g_lpdwVirtualKey; for (int i = 0; i < nLength; i++) { tmpVirtualKey++ = lpdwVirtualKey++; } g_nLength = nLength; g_bDisableKeyboard = bDisableKeyboard; g_lpfnKeyboardProc = lpfnKeyboardProc; // 安装底层键盘钩子 g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, g_hInstance, NULL); if (g_hHook == NULL) return FALSE; return TRUE; } /// 停止拦截键盘按键 // // 参数: (无) // // 返回值: TRUE 成功, FALSE 失败 ///BOOL WINAPI StopMaskKey(){ // 卸载钩子 if (UnhookWindowsHookEx(g_hHook) == 0) return FALSE; g_hHook = NULL; return TRUE;} 当然了,MaskKeyh头文件中也要加上: // 回调函数指针typedef BOOL (CALLBACK LPFNKEYBOARDPROC)(WPARAM, KBDLLHOOKSTRUCT); 下面是在VC中调用的例子:(两个Dialog的成员函数,对应两个按钮,再加上一个回调函数) // 全局键盘钩子回调函数// 参数: action 标识键盘消息(按下,d起), keyStruct 包含按键信息BOOL CALLBACK KeyboardProc(WPARAM action, KBDLLHOOKSTRUCT pKeyStruct){ // 判断按键动作 switch (action) { case WM_KEYDOWN: break; case WM_KEYUP: break; case WM_SYSKEYDOWN: break; case WM_SYSKEYUP: break; } // 返回 true 表示继续传递按键消息 // 返回 false 表示结束按键消息传递 return false;} void CMaskKeyAppDlg::OnStartmaskkey() { // 屏蔽 A, B, C, 上, 下, 左, 右及两个win键 DWORD dwVK[] = {'A', 'B', 'C', VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN, VK_LWIN, VK_RWIN}; int nLength = sizeof(dwVK) / sizeof(DWORD); StartMaskKey(dwVK, nLength, KeyboardProc); } void CMaskKeyAppDlg::OnStopmaskkey() { StopMaskKey(); } 呵呵,这样是不是让看到这里的你很兴奋呢?!StartMaskKey加了一个参数,是个函数指针,这是我们非常熟悉的回调函数的使用方法。DLL中的StartMaskKey函数收到这个函数指针后保存在了g_lpfnKeyboardProc变量中,然后在LowLevelKeyboardProc中一旦发现了要拦截的按键,就会通过函数指针调用回调函数,将控制权完全交回给DLL的调用程序,由回调函数KeyboardProc进一步处理(播放一小段音乐,还是执行个什么有意思的程序,亦或是重启关机什么的。呃,随你便了。:D),action参数用来标识键盘消息(按下或d起),pKeyStruct参数包含了丰富的按键信息,其实就是系统传给LowLevelKeyboardProc的lParam,我又把它原封不动地传给了KeyboardProc,呵呵。最重要的就是回调函数的返回值了,它就像阀门的开关一样,将决定这个按键消息的命运。从DLL中的LowLevelKeyboardProc函数的流程可以看出,如果回调函数KeyboardProc的返回值为true则表示把该按键消息继续传递给系统中的下一个钩子;如果为false则表示结束该按键消息的传递,此时将会起到拦截按键的效果。 用VB的人可能有些不耐烦了,别着急,上篇文章在最后给出了VB调用的例程,此篇当然不能缺少这部分了。下面是在VB中调用的例子:(在窗体上添加2个CommandButton,并分别改名为cmdStartMask和cmdStopMask) Option ExplicitPrivate Declare Function StartMaskKey Lib "MaskKey" (lpdwVirtualKey As Long, ByVal nLength As Long, ByVal lpfnKeyboarProc As Long, Optional ByVal bDisableKeyboard As Boolean = False) As LongPrivate Declare Function StopMaskKey Lib "MaskKey" () As Long Private Sub cmdStartMask_Click() ' 屏蔽 A, B, C, 上, 下, 左, 右及两个win键 Dim key(8) As Long key(0) = vbKeyA key(1) = vbKeyB key(2) = vbKeyC key(3) = vbKeyLeft key(4) = vbKeyRight key(5) = vbKeyUp key(6) = vbKeyDown key(7) = &H5B ' 左边的win键 key(8) = &H5C ' 右边的win键 StartMaskKey key(0), UBound(key) + 1, AddressOf KeyboardProcEnd Sub Private Sub cmdStopMask_Click() StopMaskKeyEnd Sub 窗体模块的代码和以前的例程几乎一样,只是在调用StartMaskKey函数时加了一个参数:AddressOf KeyboardProc。在VB中用过回调函数的人对这东西绝不会陌生,AddressOf是一个一元运算符,后面接一个函数名,它的功能就是获得指定函数的指针。但有一点必须注意,该回调函数(此例中为KeyboardProc)必须写在VB的标准模块中,标准模块的代码如下: Option Explicit Private Const WM_KEYDOWN = &H100Private Const WM_KEYUP = &H101Private Const WM_SYSKEYDOWN = &H104Private Const WM_SYSKEYUP = &H105 Public Type KBDLLHOOKSTRUCT vkCode As Long ' 虚拟按键码(1--254) scanCode As Long ' 硬件按键扫描码 flags As Long ' flags time As Long ' 消息时间戳 dwExtraInfo As Long ' 额外信息End Type Public Enum KEYACTION ACTION_KEYDOWN = WM_KEYDOWN ACTION_KEYUP = WM_KEYUP ACTION_SYSKEYDOWN = WM_SYSKEYDOWN ACTION_SYSKEYUP = WM_SYSKEYUPEnd Enum ' 全局键盘钩子回调函数' 参数: action 标识键盘消息(按下,d起), keyStruct 包含按键信息Public Function KeyboardProc(ByVal action As KEYACTION, keyStruct As KBDLLHOOKSTRUCT) As Boolean Select Case action Case ACTION_KEYDOWN DebugPrint keyStructvkCode, "按下键盘按键" Case ACTION_KEYUP DebugPrint keyStructvkCode, "d起键盘按键" Case ACTION_SYSKEYDOWN Case ACTION_SYSKEYUP End Select ' 返回 True 表示继续传递按键消息 ' 返回 False 表示结束按键消息传递 KeyboardProc = FalseEnd Function 和VC版的调用例程差不多,只是把语法翻译成了VB的,这个VB标准模块中的KeyboardProc有没有点MFC消息映射函数的味道呢?! :D需要注意的是,VB的回调函数必须写在标准模块中。细心的人还可能会发现,我对action参数作了一点小手脚,改成了一个枚举类型,这主要是为了易于理解。OK,要写的就这么多了,关于全局键盘钩子的内容我也想告一段落了。利用VC编写的DLL,VB也可以方便地实现全局键盘钩子了。当然,这不仅仅局限于键盘钩子,利用这种方法可以实现任何类型的钩子。
不行的。。。。js是只是浏览器的端的脚本,但不可能读取出手柄这种硬件信息的。。。也就是说,你接上手柄,写一个js测试页面,随便你怎么按手柄,不可能触发任何js事件。。
手柄也是传值,但IE不接受,键盘传的IE却接受。这就是区别。
我以前写过实况足球方面的网站,所以。。。
实在要实现,有一个办法,自己写一个activeX插件。但也只有IE能支持,ff和其他浏览器就不行了。。而且,用户要使用,必须下载这个activex插件以后安装,才能使用。。
1)onKeyDown方法,该方法是接口KeyEventCallback中的抽象方法,所有的View全部实现了该接口并重写了该方法,该方法用来捕捉手机键盘被按下的事件。
2)参数keyCode,该参数指的是被按下的键的键盘码,手机键盘中每个按钮都会有其对应的键盘码,在应用程序都是通过键盘码才知道用户按下的是哪个键。
3)当用户按下按键时,系统会自动将事件封装成KeyEvent对象供应用程序使用。按键事件KeyEvent按键事件有多种常量类型,比如 KEYCODE_BACK
4)返回值,该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理,而当返回false时,表示并没有完全处理完该事件,更希望其他回调方法继续对其进行处理,例如Activity中的回调方法。 参考文本
private voidsetFocus() {//获取焦点
et_cardnosetFocusable(true);
et_cardnosetFocusableInTouchMode(true);
et_cardnorequestFocus();
}
//实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行voidsetFocus方法。
@Override
public booleanonKeyDown(intkeyCode, KeyEvent event) {
LogUtilsd("TAG","=========================== 调用onKeyDown ");
setFocus();
return superonKeyDown(keyCode, event);
}
按下一个键。
KeyDown是按下一个键的意思,,但实际上二者的根本区别是,系统由KeyDown返回键盘的代码,然后由TranslateMessage函数翻译成成字符,由KeyPress返回字符值。
美国星驰健身器材挺不错的,比如他的跑步机能将自己的运动心率控制在合理目标值范围,可以轻松达到减肥效果同时避免了运动过渡带来的伤害。
VB在窗体中显示按下键盘按键的字母可以通过Form_KeyDown获取按键的KeyCode,然后再把KeyCode转换为相应的键的名字。
代码如下:
Private Sub Form_Load()
MeKeyPreview = True '使窗体可以获取键盘事件
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Print KeyCodeToStr(KeyCode) '获取按键信息
End Sub
Public Function KeyCodeToStr(vbKeycode As Integer) '按键的KeyCode转为相应键盘键
If vbKeycode > 47 And vbKeycode < 91 Then
KeyCodeToStr = Chr(vbKeycode)
Exit Function
ElseIf vbKeycode > 111 And vbKeycode < 124 Then
KeyCodeToStr = "F" & vbKeycode - 111
Exit Function
End If
Select Case vbKeycode
Case 8: KeyCodeToStr = "Back"
Case 9: KeyCodeToStr = "Tab"
Case 12: KeyCodeToStr = "Clear"
Case 13: KeyCodeToStr = "Enter"
Case 16: KeyCodeToStr = "Shift"
Case 17: KeyCodeToStr = "Ctrl"
Case 18: KeyCodeToStr = "Alt"
Case 19
KeyCodeToStr = "Pause"
Case 20
KeyCodeToStr = "Caps Lock"
Case 27
KeyCodeToStr = "Esc"
Case 32
KeyCodeToStr = "Space"
Case 33
KeyCodeToStr = "Page Up"
Case 34
KeyCodeToStr = "Page Down"
Case 35
KeyCodeToStr = "End"
Case 36
KeyCodeToStr = "Home"
Case 41
KeyCodeToStr = "Select"
Case 42
KeyCodeToStr = "Print Screen"
Case 43
KeyCodeToStr = "Execute"
Case 44
KeyCodeToStr = "SnapShot"
Case 45
KeyCodeToStr = "Insert"
Case 46
KeyCodeToStr = "Delete"
Case 47
KeyCodeToStr = "Help"
Case 144
KeyCodeToStr = "Num Lock"
Case 189
KeyCodeToStr = "-_"
Case 187
KeyCodeToStr = "=+"
Case 255
KeyCodeToStr = "Unknown"
Case 192
KeyCodeToStr = "`~"
Case 37
KeyCodeToStr = "Left Arrow"
Case 38: KeyCodeToStr = "Up Arrow"
Case 39
KeyCodeToStr = "Right Arrow"
Case 40
KeyCodeToStr = "Dowm Arrow"
Case 219
KeyCodeToStr = "[{"
Case 221
KeyCodeToStr = "]}"
Case 186
KeyCodeToStr = ";:"
Case 222
KeyCodeToStr = "'"""
Case 220
KeyCodeToStr = "\|"
Case 188
KeyCodeToStr = ",<"
Case 190
KeyCodeToStr = ">"
Case 191
KeyCodeToStr = "/"
Case 193
KeyCodeToStr = "\"
Case Else
KeyCodeToStr = "Unknown"
End Select
End Function
以上就是关于JavaScript事件对象调用什么属性获取按下回车键对应的码值全部的内容,包括:JavaScript事件对象调用什么属性获取按下回车键对应的码值、js 触发onkeydown事件时候,获取光标所在元素或者获取光标所在标签名称、vc下如何获取键盘任意按键并返回值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)