
在含有 KeyEventArgs类型参数的的方法里调用该参数的实例就可以知道是哪些键值
比如一个文本框的键盘按下的事件
private void txt_KeyDown(object sender, KeyEventArgs e)
{
if (KeysEnter == eKeyCode)
{
//keys表示所有键盘按键的集合
}
}
你好,很高兴为你解答:
可以的。用手抠着按键的上方,稍微用一点力向着自己的方向一扳(因部分按键排放顺序不一样,也有需横向扳的),按键就被取下了。
笔记本电脑(Laptop),简称笔记本,又被称为“便携式电脑,手提电脑、掌上电脑或膝上型电脑”,其最大的特点就是机身小巧,相比PC携带方便,是一种小型、可便于携带的个人电脑,通常重1-3公斤。当前的发展趋势是体积越来越小,重量越来越轻,而功能却越发强大。为了缩小体积,笔记型电脑当今采用液晶显示器(也称液晶LCD屏)。除了键盘以外有些还装有触控板(Touchpad)或触控点(Pointing stick)作为定位设备(Pointing device)。
1、可以使用getch()函数读取字符。
函数用途:从控制台读取一个字符,但不显示在屏幕上
函数原型:int getch(void)
返回值:读取的字符
getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回, getch返回值是用户输入的ASCII码,出错返回-1。输入的字符不会回显在屏幕上。getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行。
2、例如:
char ch;
ch=getch();
用ch=getch();会等待用户按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。
易语言如何判断某个按键是否按下可以先作一个编辑框,加入事件处理子程序为,按下某键,具体步骤如下:
子程序 _编辑框1_按下某键, 逻辑型
参数 键代码, 整数型
参数 功能键状态, 整数型
编辑框1内容 = 到文本 (键代码)
最好设置编辑框输入方式=只读方式
扩展资料:
易语言支持库文件扩展名有fne、fnr、fnl、npk四种。
fne是制作好的DLL文件,例如系统核心支持库、应用接口支持库。
fnr类似fne,但不具有编辑信息,用于编译后打包给用户使用。
fnl类似fne,但无运行支持代码的支持库,一般为易语言IDE的插件支持库。
npk属于易语言COM包装支持库,该支持库是引用COM包装库生成的,例如WebBrowser、Windows媒体播放器。
参考资料来源:百度百科-易语言
梢允褂玫撞慵�坦匙� #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也可以方便地实现全局键盘钩子了。当然,这不仅仅局限于键盘钩子,利用这种方法可以实现任何类型的钩子。
原理:判断2次按键的时间差。
但是由于系统提供的时间不支持到毫秒,所以用了API函数来读取。
Private Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Const 时间间隔 As Long = 500 '毫秒
Dim TW As SYSTEMTIME
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Static 上次时间 As Long
Static 上次按键 As Integer
'读当前时间
Call GetLocalTime(TW)
'判断时差
If TWwSecond 1000& + TWwMilliseconds - 上次时间 < 时间间隔 And KeyCode = 上次按键 Then
MsgBox "按了2下!!"
End If
上次时间 = TWwSecond 1000& + TWwMilliseconds
上次按键 = KeyCode
End Sub
以上就是关于winform 在后台 获取按下键盘全部的内容,包括:winform 在后台 获取按下键盘、华硕笔记本怎么取下电脑按键、vc下如何获取键盘随意按键并返回值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)