导航:首页 > 电脑设备 > 电脑模拟键盘编码

电脑模拟键盘编码

发布时间:2022-05-23 18:01:58

Ⅰ 如何监听windows虚拟键盘

在Microsoft Windows 中,键盘和鼠标是两个标准的用户输入源,在一些交叠的操作中通常相互补充使用。当然,鼠标在今天的应用程序中比10年前使用得更为广泛。甚至在一些应用程序中,我们更习惯于使用鼠标,例如在游戏、画图程序、音乐程序,以及Web创览器等程序中就是这样。然而,我们可以不使用鼠标,但绝对不能从一般的PC中拆掉键盘。 Windows程序获得键盘输入的方式:键盘输入以消息的形式传递给程序的窗口过程。实际上,第一次学习消息时,键盘就是一个明显的例子:消息应该传递给应用程序的信息类型。 Windows用8种不同的消息来传递不同的键盘事件。这好像太多了,但是(就像我们所看到的一样)程序可以忽略其中至少一半的消息而不会有任何问题。并且,在大多数情况下,这些消息中包含的键盘信息会多于程序所需要的。处理键盘的部分工作就是识别出哪些消息是重要的,哪些是不重要的。 键盘基础知识 虽然应用程序在很多情况下可以通过鼠标实现信息的输入,但到现在为止键盘仍然是PC机中不可替代的重要输入设备。 用键盘当作输入设备,每当用户按下或释放某一个键时,会产生一个中断,该中断激活键盘驱动程序KEYBOARD.DRV来对键盘中断进行处理。 KEYBOARD.DRV程序会根据用户的不同操作进行编码,然后调用Windows用户模块USER.EXE生成键盘消息,并将该消息发送到消息队列中等候处理。 1.扫描码和虚拟码 扫描码对应着键盘上的不同键,每一个键被按下或释放时,都会产生一个唯一的扫描码作为本身的标识。扫描码依赖于具体的硬件设备,即当相同的键被按下或释放时,在不同的机器上可能产生不同的扫描码。在程序中通常使用由Windows系统定义的与具体设备无关的虚拟码。在击键产生扫描码的同时,键盘驱动程序KEYBOARD.DRV截取键的扫描码,然后将其翻译成对应的虚拟码,再将扫描码和虚拟码一齐编码形成键盘消息。所以,最后发送到消息队列的键盘消息中,既包含了扫描码又包含了虚拟码。 经常使用的虚拟码在WINDOWS.H文件中定义,常用虚拟码的数值、常量符号和含义如表所示。 取值(16进制) 常量符号 含义 01 VK_LBUTTON 鼠标左键 02 VK_RBUTTON 鼠标右键 03 VK_CANCEL Break中断键 04 VK_MBUTTON 鼠标中键 05-07 -- 未定义 08 VK_BACK (BackSpace)键 09 VK_TAB Tab键 0A-0B -- 未定义 0C VK_CLEAR Clear键 0D VK_RETURN Enter键 0E-0F -- 未定义 10 VK_SHIFT Shift键 11 VK_CONTROL Ctrl键 12 VK_MENU Alt键 13 VK_PAUSE Pause键 14 VK_CAPTIAL CapsLock键 15-19 -- 汉字系统保留 1A -- 未定义 1B VK_ESCAPE Esc键 1C-1F -- 汉字系统保留 20 VK_SPACE 空格键 21 VK_PRIOR PageUp键 22 VK_NEXT PageDown键 23 VK_END End键 24 VK_HOME Home键 25 VK_LEFT ←(Left Arrow)键 26 VK_UP ↑(Up Arrow)键 27 VK_RIGHT →(Right Arrow)键 28 VK_DOWN ↓(Down Arrow)键 29 VK_SELECT Select键 2A -- OEM保留 2B VK_EXECUTE Execute键 2C VK_SNAPSHOT Print Screen键 2D VK_INSERT Insert键 2E VK_DELETE Delete键 2F VK_HELP Help键 30-39 VK_0-VK_9 数字键0-9 3A-40 -- 未定义 41-5A VK_A-VK_Z 字母键A-Z 5B-5F -- 未定义 60-69 VK_NUMPAD0-VK_NUMPAD9 小键盘数字键0-9 6A VK_MULTIPLY *(乘号)键 6B VK_ADD +(加号)键 6C VK_SEPAPATOR 分隔符键 6E VK_SUBTRACT -(减号)键 6F VK_DECIMAL .(小数点)键 70-87 VK_DIVIDE /(除号)键 88-8F VK_F1-VK_F24 F1-F24功能键 90 VK_NUMBERLOCK Number lock键 91 VK_SCROLL Scroll lock键 92-B9 -- 未定义 BA-C0 -- OEM保留 C1-DA -- 未定义 DB_E4 -- OEM保留 E5 -- 未定义 E6 -- OEM保留 E7-E8 -- 未定义 E9-F5 -- OEM保留 F6-FE -- 未定义 2.输入焦点 同一时刻,Windows中可能有多个不同的程序在运行,也就是说有多个窗口同时存在。这时,键盘由多个窗口共享,但只有一个窗口能够接收到键盘消息,这个能够接收键盘消息的窗口被称为拥有输入焦点的窗口。 拥有输入焦点的窗口应该是当前的活动窗口,或者是活动窗口的子窗口,其标题和边框会以高亮度显示,以区别于其他窗口。拥有输入焦点的也可以是图标而不是窗口,此时,Windows也将消息发送给图标,只是消息的格式略有不同。 窗口过程可以通过发送WM_SETFOCUS和 WM_KILLFOCUS消息使窗体获得或失去输入焦点。程序也可以通过捕获WM_SETFOCUS和WM_KILLFOCUS消息来判断窗体何时获得或失去输入焦点。其中WM_SETFOCUS消息表示窗口正获得输入焦点,WM_ KILLFOCUS消息表示窗口正失去输入焦点。 3.键盘消息 键盘消息分为系统键消息和非系统键消息。系统键消息是指由Aft键和其他键组合而产生的按键消息。当系统键被按下时产生WM_ SYSKEYDOWN消息,当系统键被释放时产生WM_SYSKEYUP消息。 Aft键与其他键形成的组合键通常用于对程序菜单和系统菜单进行选择,或用于在不同的程序之间进行切换。因此,系统键消息应该交由Windows进行处理,用户所编制的程序一般不处理系统键消息,而是将这些消息交由DefWindowProc函数进行处理。如果用户想对系统键消息进行处理,应该在处理完这些消息后,再将其发送给DefWindowProc函数,使得Windows系统能够正常工作。 某些击键消息可以被转换成字符消息,例如字母键、数字键等。而有些键只能产生按键消息而没有字符消息,例如 Shift键、Insert键等。消息循环中的 TranslateMessage函数可以实现从击键消息向字符消息的转化。当GetMessage函数捕获一个WM_SYSKEYDOWN消息或 WM_KEYDOWN消息后,TranslateMessage函数判断产生该消息的键是否能够被转换成字符消息,如果能,就将该消息转换成字符消息,再通过DispatchMessape函数将转换后的字符消息发送到消息队列中去。字符消息共有以下四种,如表所示。 字符 系统字符 非系统字符 普通字符 WM_SYSCHAR WM_CHAR 死字符 WM_SYSDEADCHAR WM_DEADCHAR 其中死字符是由某些特殊键盘上的按键所造成的,Windows一般忽略死字符所产生的消息。 Windows的消息一般是通过一个MSG结构体变量传送给消息处理函数的。对于键盘消息, MSG结构体变量的各个域中较重要的是lParam域和 wParam域。wParam域用于保存按键的虚拟键代码或字符的ASCII码。对于非字符消息,wParam域保存按键的虚拟健代码;对于字符消息, wParam域不保存字符的ASCII码。lParam域则用于保存击键时产生的附加信息,实际上一个32位的lParam变量被分为六部分,记录了以下相关信息:重复次数、OEM扫描码、扩展键标志、关联键标志、前一击键状态和转换状态。lParam域各位的含义如表所示。 位数 含义 0-15 击键重复次数累加 16-23 OEM扫描码 24 是否为扩展键 25-28 未定义 29 是否便用关联键,及Alt键是否同时按下。 30 前一次击键状态,0表示该键前一次状态为抬起,1表示前一次状态为按下 31 转换状态 按键的次序不同,产生的消息也不相同。例如,按下并释放1键,读过程依次产生如表所示三条消息。按下1键所产生的消息和wParam的取值 消息 wParam变量取值 WM_KEYDOWN 虚拟码1 WM_CHAR ASCII码“1” WM_KEYUP 虚拟码1 如果按下Shift键后再按下1键并释放,则依次产生如表所示的消息。按下 Shift键后按 1健所产生的消息和 wParam的取值 消息 wParam变量取值 WM_KEYDOWN 虚拟码 VK_SHIFT WM_KEYDOWN 虚拟码 VK_1 WM_CHAR ASCII码“1” WM_KEYUP 虚拟码 VK_1 WM_KEYUP 虚拟码 VK_SHIF 键盘应用实例 下面通过一个应用程序实例来说明在实际编程中如何处理键盘消息。 #include <windows.h> #include <stdio.h> // 全局变量 RECT rc; //记录滚屏的矩形区域 ? int xChar, yChar; //文本输入点坐标 WNDCLASSEX wnd; //窗口类结构变量 char szAppName[] = "键盘消息监视程序"; //窗口类名 //函数声明 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); BOOL MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE hInstance,int iCmdShow); //函数:WinMain //作用:入口函数 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow) { MSG msg; if(!MyRegisterClass(hInstance)) { return FALSE; } if(!InitInstance(hInstance,iCmdShow)) { return FALSE; } while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } //函数:ShowKey //作用:实现在窗口中显示按键信息 void ShowKey (HWND hwnd, int iType,char *szMessage,WPARAM wParam,LPARAM lParam) { static char *szFormat[2] ={"%-14s %3d %c %6u %4d %5s %5s %6s %6s", "%-14s %3d %c %6u %4d %5s %5s %6s %6s" }; char szBuffer[80]; HDC hdc; ScrollWindowEx(hwnd, 0, -yChar, &rc,&rc,NULL,NULL,SW_INVALIDATE); hdc = GetDC (hwnd); SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); TextOut (hdc, xChar, rc.bottom - yChar, szBuffer, wsprintf szBuffer, szFormat[iType], szMessage, //消息 wParam, //虚拟键代码 (BYTE) (iType ? wParam :‘ ’),//显示字符值 LOWORD (lParam), // 重复次数 HIWORD (lParam) & 0xFF, // OEM键盘扫描码 //判断是否为增强键盘的扩展键 (PSTR) (0x01000000 & lParam ? “是” : “否”), //判断是否同时使用了ALT键 (PSTR) (0x20000000 & lParam ? “是” : “否”), (PSTR) (0x40000000 & lParam ? “按下” : “抬”), //判断前一次击键状 (PSTR)(0x80000000 & lParam ? “按下” : “抬起”)) //判断转换状态? ); ReleaseDC (hwnd, hdc); ? ValidateRect (hwnd, NULL); ? } //函数:WndProc //作用:处理主窗口的消息 LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static char szTop[] ="消息键 字符 重复数 扫描码 扩展码 ALT 前一状态 转换状态"; static char szUnd[] ="_______ __ ____ _____ ______ ______ ___ _______ ______"; //在窗口中输出文字作为信息标题 HDC hdc; PAINTSTRUCT ps; TEXTMETRIC tm; switch (iMsg) { case WM_CREATE://处理窗口创建的消息 hdc = GetDC (hwnd); //设定字体 SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); //检取当前字体的度量数据 GetTextMetrics (hdc, &tm); xChar = tm.tmAveCharWidth;//保存字体平均宽度 yChar = tm.tmHeight; //保存字体高度 ReleaseDC (hwnd, hdc); rc.top = 3 * yChar / 2; return 0; case WM_SIZE://处理窗口大小改变的消息 //窗体改变后保存新的滚屏区域右下角坐标 rc.right = LOWORD (lParam); rc.bottom = HIWORD (lParam); UpdateWindow (hwnd); return 0; case WM_PAINT: //处理窗口重绘消息 InvalidateRect (hwnd, NULL, TRUE); hdc = BeginPaint (hwnd, &ps); SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; SetBkMode (hdc, TRANSPARENT) ; TextOut (hdc, xChar, yChar / 2, szTop, (sizeof szTop) - 1) ; TextOut (hdc, xChar, yChar / 2, szUnd, (sizeof szUnd) - 1) ; EndPaint (hwnd, &ps); return 0; case WM_KEYDOWN: //处理键盘上某一键按下的消息 ShowKey (hwnd, 0, "WM_KEYDOWN",wParam, lParam); return 0; case WM_KEYUP: //处理键盘上某一按下键被释放的消息 ShowKey (hwnd, 0, "WM_KEYUP", wParam, lParam); return 0; case WM_CHAR: //处理击键过程中产生的非系统键的可见字符消息 howKey (hwnd, 1, "WM_CHAR", wParam, lParam); return 0; case WM_DEADCHAR: //处理击键过程中产生的非系统键"死字符"消息 ShowKey (hwnd, 1, "WM_DEADCHAR", wParam, lParam); return 0; case WM_SYSKEYDOWN: //处理系统键按下的消息 ShowKey (hwnd, 0, "WM_SYSKEYDOWN",wParam, lParam); break; case WM_SYSKEYUP: //处理系统键抬起的消息 ShowKey (hwnd, 0, "WM_SYSKEYUP", wParam, lParam); break; case WM_SYSCHAR://处理系统键可见字符消息 ShowKey (hwnd, 1, "WM_SYSCHAR", wParam, lParam); break; case WM_SYSDEADCHAR://处理系统键"死字符"消息 ShowKey (hwnd, 1, "WM_SYSDEADCHAR", wParam, lParam); break; case WM_DESTROY: //处理结束应用程序的消息 PostQuitMessage (0); return 0; } return DefWindowProc (hwnd, iMsg, wParam, lParam); } //函数:MyRegisterClass //作用:注册窗口类 BOOL MyRegisterClass(HINSTANCE hInstance) { wnd.cbSize= sizeof (wnd); wnd.style = CS_HREDRAW CS_VREDRAW; wnd.lpfnWndProc = WndProc; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hInstance = hInstance; wnd.hIcon = LoadIcon (NULL, IDI_APPLICATION);? wnd.hCursor = LoadCursor (NULL, IDC_ARROW); wnd.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wnd.lpszMenuName = NULL; wnd.lpszClassName = szAppName; wnd.hIconSm = LoadIcon (NULL, IDI_APPLICATION); return RegisterClassEx (&wnd); } //函数:InitInstance //作用:创建主窗口 BOOL InitInstance(HINSTANCE hInstance,int iCmdShow) { HWND hwnd; hwnd = CreateWindow (szAppName, "键盘消息监视程序", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL ); if(!hwnd) { return FALSE; } ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); return TRUE; }

Ⅱ 设备识别,关于扫描码,虚拟键码,键盘ASCII码区别于联系的理解

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

Ⅲ 请教如何得到按键的硬件扫描码 100publicsub

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

Ⅳ 虚拟QWERTY键盘 和 虚拟键盘 有什么区别htc g14 属于哪种

手机虚拟键盘是指用于全触摸手机的虚拟于屏幕的按键虚拟键盘。可直接把触摸屏上的虚拟键盘当实质键盘使用。
手机虚拟键盘为一种以CCITT的标准键,结合多个功能键组成实际键盘及键值表,产生虚拟键盘,以改善数据键入的方法,至少包含以下步骤:依据预设的键盘状态值显示对应的虚拟键;判断是否有实际键被按下,若被按下键为CCITT标准键其中之一时,查询键值表以得到键值;然后以预设的键盘状态值及键值,查询键值表以得到虚拟键值;若虚拟键值为虚拟键盘切换键则依据虚拟键盘切换键的键值改变键盘状态值并呼叫键盘显示模组以显示对应的虚拟键盘,并且去除键值;否则,呼叫键盘显示模组以显示该虚拟键值。

QWERTY键盘,也称全键盘,即第一行开头6个字母是Q、W、E、R、T、Y的键盘布局,也就是现在普遍使用的电脑键盘布局。
“QWERTY”是主键盘字母区左上角6个字母的连写 我们现在使用的键盘都称为QWERTY柯蒂键盘。 最初,打字机的键盘是按照字母顺序排列的,但如果打字速度过快,某些键的组合很容易出现卡键问题,于是克里斯托夫.拉森.授斯(Christopher Latham Sholes)发明了QWERTY键盘布局,他将最常用的几个字母安置在相反方向,“在不至卡住的前提下尽量提高打字速度”。授斯在1868年申请专利,1873年使用此布局的第一台商用打字机成功投放市场。这就是为什么有今天键盘的排列方式。 键盘的键位设计 一款键盘的键位设计包含了两个概念,一是主体的英文和数字键位设计,二是各种附属键位设计。 最通常的英文与数字键位设计方案就是俗称的“QWERTY”柯蒂键盘。这是Christopher Latham Sholes于1868年发明的键位方案。 众所周知,柯蒂键盘主要的设计目的就是使击键的速度不至太快。不过在很多文章中的说法有一个小小的错误,这就是——柯蒂键盘的键位设计并不是要“使击键的速度不至太快导致卡住”,而是“在不至卡住的前提下尽量提高打字速度”。 这两种说法中有一个微妙的差异,这就是说,减慢打字速度不是最终目的,QWERTY键盘并不是在一味的减低速度,它固然有把ED这样的常见组合放在一个手指上的减低速度设计,但也有很多诸如ER这样的加速组合键位。 实际上这样设计的根本原因在于机械式打字机的结构,其铅字杠杆的结构决定了当两个位置接近的铅字同时按下的时候就会卡死,但相对的两个相距较远的铅字就不会发生同样的问题,相信有过英文打字机使用经验的人应该都会有所体会。 在柯蒂键盘上,一些常用的字母被放在无名指、小拇指等位置上,这一向被认为是用小拇指等的不灵活性来减低速度,但这种说法没有考虑到机械式打字机的实际情况,食指固然是最灵活的,但食指键位上的按键也是最容易卡死的,所以将常用字母放在边缘以保证在高速打字时不会卡死也就是理所当然的。 所以说,设计柯蒂键盘的最终目的并不是为了单纯的减低打字速度,事实上,柯蒂键盘的设计方案恰恰是为了提高打字速度,只不过是“在不会卡死的情况下尽力提高打字速度”。
QWERTY键盘,也称全键盘。即第一行开头6个字母是Q、W、E、R、T、Y的键盘布局,也就是现在普遍使用的电脑键盘布局。 QWERTY键盘是为了降低打字速度 最初,打字机的键盘是按照字母顺序排列的,但如果打字速度过快,某些键的组合很容易出现卡键问题,于是克里斯托夫·拉森·授斯(Christopher Latham Sholes)发明了QWERTY键盘布局,他将最常用的几个字母安置在相反方向,最大限度放慢敲键速度以避免卡键。授斯在1868年申请专利,1873年使用此布局的第一台商用 打字机成功投放市场。这就是为什么有今天键盘的排列方式。 QWERTY键盘-键盘排列方式 但具有讽刺意味的是,这种129年前形成的、以放慢敲键速度为目的的键盘排列方式却延续至今。1986年布鲁斯·伯里文爵士曾在《奇妙的书写机器》一文中表示:“QWERTY的安排方式非常没效率。”,比如:大多数打字员惯用右手,但使用QWERTY,左手却负担了57%的工作。两小指及左无名指是最没力气的指头,却频频要使用它们。排在中列的字母,其使用率仅占整个打字工作的30%左右,因此,为了打一个字,时常要上上下下移动指头。 QWERTY键盘-还有下面的说法 电脑键盘是从英文打字机键盘演变而来的,当它最早出现在电脑上的时候,是以一种叫做“电传打字机”的部件的形象出现的。 QWERTY键盘-纸带打字机和卡片打字机 实际上,比电传打字机更早的年代,键盘就已经出现在电脑附属设备上了,在电脑还是能够占满一个大厅的年代里,主要的电脑输入设备就是穿孔纸带和穿孔卡片,这些纸带和卡片当然不可能是人手一点点穿出来的,它们是使用专用的“纸带穿孔机”和“卡片穿孔机”来穿出的,而在这两种机器上也都有一台很像普通打字机的电动打字机作为输入设备。只不过相对而言,这两种设备都不是电脑的一部分,这点是和电传打字机不同的,所以我们不把它们作为电脑键盘发展史的一部分。 “电传打字机”是在键盘+显示器的输入输出设备出现以前电脑主要的交互式输入输出设备,你可以把它想象成一个上盖带有键盘的打印机,用户所打的字和电脑输出的结果都会在键盘前方的打印输出口上打印出来。 “电传打字机”是大型计算机(MAINCOMPUTER)和小型计算机(SMALLCOMPUTER)时代最主要的电脑交互式输入输出设备。70年代中期以后,随着显示器设计的成熟,电传打字机就逐渐退出了电脑的世界,而键盘则从从摆脱出来成为了独立的一种设备。 “电传打字机”的键盘没有今天电脑键盘那么按键和那么多功能,实际上它几乎和全尺寸的打字机键盘是一样的,电木塑料下面是机械的按键结构,这种设计也为初期的电脑键盘所继承。 在这个时期,由于个人电脑的体积还很小,所以流行的设计是将键盘直接作在主机上,着名的APPLEII系列电脑就是这样的结构。但随着IBMPC开始将当时还很庞大的硬盘引入到个人电脑上,在80年代中期,独立的键盘成为主流的设计。 早期的键盘几乎都是机械式键盘,准确的说是机械触点式键盘,这种键盘使用电触点接触作为连同标志,使用机械金属弹簧作为弹力机构。这种键盘的手感硬、按键行程长、按键阻力变化快捷清脆,手感很接近打字机键盘,所以在当时很受欢迎,直到今天仍然有相当一部分人十分怀念这种键盘的手感。 但是,机械触点式键盘最大的两个缺点是机械弹簧很容易损坏,而且电触点会在长时间使用后氧化,导致按键失灵。所以在90年代以后,机械触点式键盘就逐渐退出了历史舞台。 一开始,取而代之的是电磁机械式键盘。电磁机械式键盘仍然是一种机械式键盘,但它与机械触点式键盘不同的是,它并非依靠机械力将两个电触点连通,而是将电触点封闭在一个微型电位器里,在按键下部则放置一个磁铁,通过磁力来接通电流。 与机械触点式键盘相比,电磁机械式键盘的使用寿命强了很多,但是仍然没能解决机械式键盘所固有的机械运动部分容易损坏的问题,所以电磁机械式键盘没能在市场上生存多久,很快就被80年代后期出现的非接触式键盘取代了。 所以非接触式键盘,是与此前的各种“接触式键盘”相对而言的,与“接触式键盘”不同的是,它们并不是依靠导电触点的机械式连通来获得按键信号的,而是依靠按键本身的电参数变化来获得按键信号。由于不需要触点的机械接触,所以它的使用寿命就能强很多。 主要的非接触式键盘有电阻式键盘和电容式键盘。其中电容式键盘由于工艺更加简单成本更低所以更受到普遍应用。与机械式键盘相比,它最大的两个特点是使用弹性橡胶制作的弹簧取代了机械金属弹簧,同时由机械键盘的电连通转为通过按键底部和键盘底部的两个电容极板距离的变化带来的电容量变化来获得按键的信号。 与机械式键盘相比,电容式键盘的手感有了很大的变化,变得轻柔而富于韧性,这种手感一直延续到今天,成为目前键盘的主流设计手感,这也就是为什么很多文章说现在的键盘都是电容式键盘的原因,但其实这种手感并不来自电容式的结构而来自橡胶弹簧对机械金属弹簧的取代,这不是电容式键盘之所以为电容式键盘的原因。 电容式键盘由于其原理,所以每一个按键都必须做成独立的封闭结构,这样的键盘也被分类为“封闭式键盘”。 对于大多数键盘文章,讲到电容式键盘也就告一段落了,但是其实他们的错误也正在于此,为什么?这里先卖一个关子,当我们讲到键盘的结构时再继续。 QWERTY键盘-键盘的键位设计 一款键盘的键位设计包含了两个概念,一是主体的英文和数字键位设计,二是各种附属键位设计。最通常的英文与数字键位设计方案就是俗称的“QWERTY”柯蒂键盘。这是ChristopherLathamSholes于1868年发明的键位方案。 总所周知,柯蒂键盘主要的设计目的就是使击键的速度不至太快。不过在很多文章中的说法有一个小小的错误,这就是——柯蒂键盘的键位设计并不是要“使击键的速度不至太快导致卡住”,而是“在不至卡住的前提下尽量提高打字速度”。 这两种说法中有一个微妙的差异,这就是说,减慢打字速度不是最终目的,QWERTY键盘并不是在一味的减低速度,它固然有把ED这样的常见组合放在一个手指上的减低速度设计,但也有很多诸如ER这样的加速组合键位。 实际上这样设计的根本原因在于机械式打字机的结构,其铅字杠杆的结构决定了当两个位置接近的铅字同时按下的时候就会卡死,但相对的两个相距较远的铅字就不会发生同样的问题,相信有过英文打字机使用经验的人应该都会有所体会。 在柯蒂键盘上,一些常用的字母被放在无名指、小拇指等位置上,这一向被认为是用小拇指等的不灵活性来减低速度,但这种说法没有考虑到机械式打字机的实际情况,食指固然是最灵活的,但食指键位上的按键也是最容易卡死的,所以将常用字母放在边缘以保证在高速打字时不会卡死也就是理所当然的。 所以说,设计柯蒂键盘的最终目的并不是为了单纯的减低打字速度,事实上,柯蒂键盘的设计方案恰恰是为了提高打字速度,只不过是“在不会卡死的情况下尽力提高打字速度”。 进入20世纪以后,机电打字机发明使得机械式打字机的铅字臂卡死不再成为一个重要的问题,众多的高速打字键盘也就应运而生。其中最着名的也就是DVORAK德沃拉克键盘。 德沃拉克键盘是AugustDvorak教授在1930年设计的键位方案,由于不再考虑按键的机械结构问题,所以按键排布完全按照理想化的击键率分布设计。手指运动的行程比柯蒂键盘要小得多,平均打字速度几乎提高了一倍。不过正如很多事情一样,习惯的力量是难以抵挡的,德沃拉克键盘至今只是在极少数专业场合使用。不过对于想试试的人来说,可以尝试一下Windows里自带的德沃拉克键盘方案。 QWERTY键盘-非英文键盘方案 各种语言的键盘基本都是在英文键盘的基础上改变而成的,大部分键的排列方式都和英文键盘相差不远,只有一些细微的差别,例如英国键盘上的美元符号变成了英镑符号,而德文键盘上的子母Y和Z互换了位置。各种远东语言键盘在英文按键部分则与不标准的美式英文键盘没有什么大的不同,但在一些附属按键上则有明显的区别。对于中国用户来说,最容易见到的非美语言键盘可能就是二手市场上常见的日文键盘了,与标准的英文键盘相比,它的大部分按键都是一样的,但在一些标点符号上却有明显的位置差异,从而导致在英文系统中使用一些标点的时候出现按键的标识和实际内容对应不上的情况。 键位设计的另一个概念就是附属键位的设计,从最早的IBMPC83键盘到现在主流的108键Windows98键盘,已经更新了几代,但总体上并没有根本性的变化。虽然其中有一些诸如紧凑型的设计,但从市场反应来看是不成功的。由此可见,目前的键盘键位设计经过了多年的实践检验,已经是非常成熟的理想设计。 弄巧成拙的十字方向键设计 所谓的十字形方向键,指的就是键盘上的独立方向键呈十字形排列,这种设计最初是为了在形象上更为接近传统的83键盘设计,但实际的效果却相当的差。 最早的十字形键是微软第一代人体工学键盘上使用的,但随后就成为这一代名品上被人骂得最多的设计,十字形的键位看起来很好看,但实际使用一下就会发现这种按键设计手指会别扭的挤在一起,无论在日常使用还是在游戏中都极不方便,特别是在赛车游戏中几乎没法玩下去。所以微软在此后的第二代产品中又改回了原来的设计。 不过可笑的是,始作俑者微软自己都已经不用十字形方向键了,但近来一些国内的厂商却又把这种弄巧成拙的设计拾了回来,还作为特色设计之一来大肆宣传。强烈建议大家对此不要考虑,否则买回来就有够受的。 QWERTY键盘的结构 前面,我们提到了,现在的键盘其实并不是真正的电容键盘,那么现在的键盘属于哪一类呢?还是让我们拆开一个键盘来看一看。 从照片上我们可以看到一个普通的超薄型键盘,拆开后背的螺丝以后,可以将键盘拆成如图的几个部件。首先是键盘和上盖板和嵌在其中的每个按键的键帽,这是用户所主要接触的部分。 在上盖板以下,是一块橡胶薄膜,在每个按键的位置上有一个弹性键帽,这个部件就是键盘的主要弹性元件,一款键盘的手感主要就是由这个部件的性状和材质决定的,因此其形状设计和橡胶成分都是各大键盘厂商的机密。需要指出的是,并不是所有的厂商都使用这样的一体式橡胶薄膜,某些厂商如明基在某些键盘上习惯于每个按键都使用单独的橡胶弹簧,这样的设计更有利于保持每个按键手感的统一,但生产工序更为复杂一些。 在橡胶薄膜以下,是三层重叠在一起的塑料薄膜,上下两层覆盖着薄膜导线,在每个按键的位置上有两个触点,而中间一张塑料薄膜则是不含任何导线的,将上下两层导电薄膜分割绝缘开来,而在按键触点的位置上则开有圆孔。 这样,在正常情况下,上下两层导电薄膜被中间层分隔开来,不会导通。但在上层薄膜受压以后,就会在开孔的部位与下层薄膜连同,从而产生一个按键信号。 由此可见,现在的键盘实际上是一种接触式键盘,尽管外形大相径庭,但实际上它的基本原理和机械触点式键盘是一样的,依靠机械性的导电触点连同来产生按键信号。根本不是电容式键盘。 实际上这种键盘的真正名字叫做“薄膜接触式键盘”,是一种机械接触式键盘。它和机械触点式键盘一样,有寿命短易损坏的问题,但是由于橡胶弹簧取代了金属弹簧,所以它的手感比机械触点式键盘要好而接近于电容式键盘,而且寿命虽不及电容式键盘,但比机械触点式键盘要长得多。 真正的电容式键盘依据的是非接触式的电容导电触发原理,所以电路结构比薄膜接触式键盘要复杂得多,而且电容式键盘的每个键都使用的是封闭式结构,其整体成本要远远高于开放式的薄膜接触式键盘。所以现在除了少数高档特种键盘以外,其实已经没有真正的电容式键盘在卖了。 目前的主流键盘除了薄膜接触式键盘以外,还有另外一种“导电橡胶接触式键盘”,它的特点是只有一层导电薄膜,在每个按键位置上有不连通的两个触点,而橡胶弹簧的下部则使用导电橡胶来制作,当按下的时候就会将两个触点连通。 可以看出来,这种键盘的原理和计算器按键的原理是很接近的。实际上早在个人电脑的早期,这种设计就经常在一些超薄的膝上型电脑上使用。只是与薄膜接触式键盘相比,这种结构的寿命更短,所以现在除了在某些特殊用途以外,已经在逐渐消失中。 在键盘的右上角,有一块与薄膜连同的电路板,这块电路板就是键盘的核心部分,从导电薄膜传来的导通信号会通过导线输入到电路板上的运算芯片,这块芯片会根据上下两条表面的导线编号通过芯片内部的一张按键排布表查找出对应按键的ASCII码,通过接口将其输出。 这种通过查表获得按键编码的方式称之为“非编码式键盘”,相对的有“编码式键盘”,这种键盘的ASCII码是直接由每个按键的数字电路产生的。与非编码式键盘相比,编码式键盘的成本高,重定义困难,所以现在已经很罕见了。电容式键盘由于其工作原理,大都是编码式键盘,这也从另一个角度证明了现在的主流键盘并不是电容式键盘。 QWERTY键盘-ASCII码 ASCII码,即“美国国家标准资讯交换码”()的缩写。对于学过编程的朋友相信并不陌生,而对于没有学过编程的朋友,可能就有介绍一番的需要。 ASCII码是由ANSIX.3.4和ISO646两种早期的编码规格整合而来,在1970年由美国国家标准化委员会通过的编码规格,它规定了128个基础英文字符的二进制编码规则,如大写字母“A”的编码就是65,而空格的编码则为32。ASCII推出后逐渐取代了其他旧的编码成为电脑编码的统一标准,并被国际标准化组织ISO在80年代确认为国际标准。 由于ASCII只规定了128个最常用的英文字符,所以随着电脑字符集的增长,逐渐出现了很多种在ASCII上扩充的编码方式,我们熟悉的Unicode编码就是其中较为复杂的一种,这是在标准的ASCIINO.5和ISO10646基础上开发的32bits编码方案。ISO10646是在ISO08859-1基础上开发的编码方案(ISO08859-1是在ASCII标准版ASCIINO.5上开发的256字符的标准扩展ASCII编码),包含了目前所有的电脑字符在内,但由于过于庞大,所以在此基础上发展了16bits的Unicode,其复杂度比ISO10646小了很多,但不包含一些非常罕见的的字符在内.

Ⅳ X或x键的虚键码是多少

所谓的虚键码就是ascii码。

其中X的ascii码为:88;x的ascii码为120。

附:ascii码表

ascii码简介:

ascii(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

请注意,ascii是American Standard Code for Information Interchange缩写,而不是ASC2,有很多人在这个地方产生误解。

Ⅵ virtual-key codes用的是什么编码

Virtual-Key_CodesJ是虚拟键码。
适用于: 桌面应用程序 下表显示了符号常量的名称, 十六进制值, 鼠标或键盘等值的系统所使用的虚拟键码。 按数字顺序列出的代码。

Ⅶ 虚拟键盘按键的代码是什么

set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys ("^a") 其中^ 是Ctrl键s

Ⅷ 如何模拟键盘输入的所有应用程序

1.在Microsoft Windows 中,键盘和鼠标是两个标准的用户输入源,在一些交叠的操作中通常相互补充使用。当然,鼠标在今天的应用程序中比10年前使用得更为广泛。甚至在一些应用程序中,我们更习惯于使用鼠标,例如在游戏、画图程序、音乐程序,以及Web创览器等程序中就是这样。然而,我们可以不使用鼠标,但绝对不能从一般的PC中拆掉键盘。
Windows程序获得键盘输入的方式:键盘输入以消息的形式传递给程序的窗口过程。实际上,第一次学习消息时,键盘就是一个明显的例子:消息应该传递给应用程序的信息类型。
Windows用8种不同的消息来传递不同的键盘事件。这好像太多了,但是(就像我们所看到的一样)程序可以忽略其中至少一半的消息而不会有任何问题。并且,在大多数情况下,这些消息中包含的键盘信息会多于程序所需要的。处理键盘的部分工作就是识别出哪些消息是重要的,哪些是不重要的。
2.键盘基础知识
虽然应用程序在很多情况下可以通过鼠标实现信息的输入,但到现在为止键盘仍然是PC机中不可替代的重要输入设备。
用键盘当作输入设备,每当用户按下或释放某一个键时,会产生一个中断,该中断激活键盘驱动程序KEYBOARD.DRV来对键盘中断进行处理。 KEYBOARD.DRV程序会根据用户的不同操作进行编码,然后调用Windows用户模块USER.EXE生成键盘消息,并将该消息发送到消息队列中等候处理。
1.扫描码和虚拟码
扫描码对应着键盘上的不同键,每一个键被按下或释放时,都会产生一个唯一的扫描码作为本身的标识。扫描码依赖于具体的硬件设备,即当相同的键被按下或释放时,在不同的机器上可能产生不同的扫描码。在程序中通常使用由Windows系统定义的与具体设备无关的虚拟码。在击键产生扫描码的同时,键盘驱动程序KEYBOARD.DRV截取键的扫描码,然后将其翻译成对应的虚拟码,再将扫描码和虚拟码一齐编码形成键盘消息。所以,最后发送到消息队列的键盘消息中,既包含了扫描码又包含了虚拟码。
经常使用的虚拟码在WINDOWS.H文件中定义,常用虚拟码的数值、常量符号和含义如表所示。

取值(16进制) 常量符号 含义
01 VK_LBUTTON 鼠标左键
02 VK_RBUTTON 鼠标右键
03 VK_CANCEL Break中断键
04 VK_MBUTTON 鼠标中键
05-07 -- 未定义
08 VK_BACK (BackSpace)键
09 VK_TAB Tab键
0A-0B -- 未定义
0C VK_CLEAR Clear键
0D VK_RETURN Enter键
0E-0F -- 未定义
10 VK_SHIFT Shift键
11 VK_CONTROL Ctrl键
12 VK_MENU Alt键
13 VK_PAUSE Pause键
14 VK_CAPTIAL CapsLock键
15-19 -- 汉字系统保留
1A -- 未定义
1B VK_ESCAPE Esc键
1C-1F -- 汉字系统保留
20 VK_SPACE 空格键
21 VK_PRIOR PageUp键
22 VK_NEXT PageDown键
23 VK_END End键
24 VK_HOME Home键
25 VK_LEFT ←(Left Arrow)键
26 VK_UP ↑(Up Arrow)键
27 VK_RIGHT →(Right Arrow)键
28 VK_DOWN ↓(Down Arrow)键
29 VK_SELECT Select键
2A -- OEM保留
2B VK_EXECUTE Execute键
2C VK_SNAPSHOT Print Screen键
2D VK_INSERT Insert键
2E VK_DELETE Delete键
2F VK_HELP Help键
30-39 VK_0-VK_9 数字键0-9
3A-40 -- 未定义
41-5A VK_A-VK_Z 字母键A-Z
5B-5F -- 未定义
60-69 VK_NUMPAD0-VK_NUMPAD9 小键盘数字键0-9
6A VK_MULTIPLY *(乘号)键
6B VK_ADD +(加号)键
6C VK_SEPAPATOR 分隔符键
6E VK_SUBTRACT -(减号)键
6F VK_DECIMAL .(小数点)键
70-87 VK_DIVIDE /(除号)键
88-8F VK_F1-VK_F24 F1-F24功能键
90 VK_NUMBERLOCK Number lock键
91 VK_SCROLL Scroll lock键
92-B9 -- 未定义
BA-C0 -- OEM保留
C1-DA -- 未定义
DB_E4 -- OEM保留
E5 -- 未定义
E6 -- OEM保留
E7-E8 -- 未定义
E9-F5 -- OEM保留
F6-FE -- 未定义

2.输入焦点
同一时刻,Windows中可能有多个不同的程序在运行,也就是说有多个窗口同时存在。这时,键盘由多个窗口共享,但只有一个窗口能够接收到键盘消息,这个能够接收键盘消息的窗口被称为拥有输入焦点的窗口。
拥有输入焦点的窗口应该是当前的活动窗口,或者是活动窗口的子窗口,其标题和边框会以高亮度显示,以区别于其他窗口。拥有输入焦点的也可以是图标而不是窗口,此时,Windows也将消息发送给图标,只是消息的格式略有不同。
窗口过程可以通过发送WM_SETFOCUS和 WM_KILLFOCUS消息使窗体获得或失去输入焦点。程序也可以通过捕获WM_SETFOCUS和WM_KILLFOCUS消息来判断窗体何时获得或失去输入焦点。其中WM_SETFOCUS消息表示窗口正获得输入焦点,WM_ KILLFOCUS消息表示窗口正失去输入焦点。
3.键盘消息
键盘消息分为系统键消息和非系统键消息。系统键消息是指由Aft键和其他键组合而产生的按键消息。当系统键被按下时产生WM_ SYSKEYDOWN消息,当系统键被释放时产生WM_SYSKEYUP消息。 Aft键与其他键形成的组合键通常用于对程序菜单和系统菜单进行选择,或用于在不同的程序之间进行切换。因此,系统键消息应该交由Windows进行处理,用户所编制的程序一般不处理系统键消息,而是将这些消息交由DefWindowProc函数进行处理。如果用户想对系统键消息进行处理,应该在处理完这些消息后,再将其发送给DefWindowProc函数,使得Windows系统能够正常工作。
某些击键消息可以被转换成字符消息,例如字母键、数字键等。而有些键只能产生按键消息而没有字符消息,例如 Shift键、Insert键等。消息循环中的 TranslateMessage函数可以实现从击键消息向字符消息的转化。当GetMessage函数捕获一个WM_SYSKEYDOWN消息或 WM_KEYDOWN消息后,TranslateMessage函数判断产生该消息的键是否能够被转换成字符消息,如果能,就将该消息转换成字符消息,再通过DispatchMessape函数将转换后的字符消息发送到消息队列中去。字符消息共有以下四种,如表所示。

字符 系统字符 非系统字符
普通字符 WM_SYSCHAR WM_CHAR
死字符 WM_SYSDEADCHAR WM_DEADCHAR

其中死字符是由某些特殊键盘上的按键所造成的,Windows一般忽略死字符所产生的消息。
Windows的消息一般是通过一个MSG结构体变量传送给消息处理函数的。对于键盘消息, MSG结构体变量的各个域中较重要的是lParam域和 wParam域。wParam域用于保存按键的虚拟键代码或字符的ASCII码。对于非字符消息,wParam域保存按键的虚拟健代码;对于字符消息, wParam域不保存字符的ASCII码。lParam域则用于保存击键时产生的附加信息,实际上一个32位的lParam变量被分为六部分,记录了以下相关信息:重复次数、OEM扫描码、扩展键标志、关联键标志、前一击键状态和转换状态。lParam域各位的含义如表所示。

位数 含义
0-15 击键重复次数累加
16-23 OEM扫描码
24 是否为扩展键
25-28 未定义
29 是否便用关联键,及Alt键是否同时按下。
30 前一次击键状态,0表示该键前一次状态为抬起,1表示前一次状态为按下
31 转换状态

按键的次序不同,产生的消息也不相同。例如,按下并释放1键,读过程依次产生如表所示三条消息。按下1键所产生的消息和wParam的取值

消息 wParam变量取值
WM_KEYDOWN 虚拟码1
WM_CHAR ASCII码“1”
WM_KEYUP 虚拟码1

如果按下Shift键后再按下1键并释放,则依次产生如表所示的消息。按下 Shift键后按 1健所产生的消息和 wParam的取值

消息 wParam变量取值
WM_KEYDOWN 虚拟码 VK_SHIFT
WM_KEYDOWN 虚拟码 VK_1
WM_CHAR ASCII码“1”
WM_KEYUP 虚拟码 VK_1
WM_KEYUP 虚拟码 VK_SHIF

键盘应用实例
下面通过一个应用程序实例来说明在实际编程中如何处理键盘消息。

#include
#include
// 全局变量
RECT rc; //记录滚屏的矩形区域
int xChar, yChar; //文本输入点坐标
WNDCLASSEX wnd; //窗口类结构变量
char szAppName[] = "键盘消息监视程序"; //窗口类名
//函数声明
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance,int iCmdShow);
//函数:WinMain
//作用:入口函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
MSG msg;
if(!MyRegisterClass(hInstance))
{
return FALSE;
}

if(!InitInstance(hInstance,iCmdShow))
{
return FALSE;
}

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
//函数:ShowKey
//作用:实现在窗口中显示按键信息
void ShowKey (HWND hwnd, int iType,char *szMessage,WPARAM wParam,LPARAM lParam)
{
static char *szFormat[2] ={"%-14s %3d %c %6u %4d %5s %5s %6s %6s",
"%-14s %3d %c %6u %4d %5s %5s %6s %6s" };
char szBuffer[80];
HDC hdc;
ScrollWindowEx(hwnd, 0, -yChar, &rc,&rc,NULL,NULL,SW_INVALIDATE);
hdc = GetDC (hwnd);
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT));
TextOut (hdc,
xChar,
rc.bottom - yChar,
szBuffer,
wsprintf szBuffer,
szFormat[iType],
szMessage, //消息
wParam, //虚拟键代码
(BYTE) (iType ? wParam :‘ ’),//显示字符值
LOWORD (lParam), // 重复次数
HIWORD (lParam) & 0xFF, // OEM键盘扫描码
//判断是否为增强键盘的扩展键
(PSTR) (0x01000000 & lParam ? “是” : “否”),
//判断是否同时使用了ALT键
(PSTR) (0x20000000 & lParam ? “是” : “否”),
(PSTR) (0x40000000 & lParam ? “按下” : “抬”),
//判断前一次击键状
(PSTR)(0x80000000 & lParam ? “按下” : “抬起”))
//判断转换状态?
);
ReleaseDC (hwnd, hdc); ?
ValidateRect (hwnd, NULL); ?
}
//函数:WndProc
//作用:处理主窗口的消息
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static char szTop[] ="消息键 字符 重复数 扫描码 扩展码 ALT 前一状态 转换状态";
static char szUnd[] ="_______ __ ____ _____ ______ ______ ___ _______ ______";
//在窗口中输出文字作为信息标题
HDC hdc;
PAINTSTRUCT ps;
TEXTMETRIC tm;
switch (iMsg)
{
case WM_CREATE://处理窗口创建的消息
hdc = GetDC (hwnd); //设定字体
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); //检取当前字体的度量数据
GetTextMetrics (hdc, &tm);
xChar = tm.tmAveCharWidth;//保存字体平均宽度
yChar = tm.tmHeight; //保存字体高度
ReleaseDC (hwnd, hdc);
rc.top = 3 * yChar / 2;
return 0;
case WM_SIZE://处理窗口大小改变的消息
//窗体改变后保存新的滚屏区域右下角坐标
rc.right = LOWORD (lParam);
rc.bottom = HIWORD (lParam);
UpdateWindow (hwnd);
return 0;
case WM_PAINT: //处理窗口重绘消息
InvalidateRect (hwnd, NULL, TRUE);
hdc = BeginPaint (hwnd, &ps);
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
SetBkMode (hdc, TRANSPARENT) ;
TextOut (hdc, xChar, yChar / 2, szTop, (sizeof szTop) - 1) ;
TextOut (hdc, xChar, yChar / 2, szUnd, (sizeof szUnd) - 1) ;
EndPaint (hwnd, &ps);
return 0;
case WM_KEYDOWN:
//处理键盘上某一键按下的消息
ShowKey (hwnd, 0, "WM_KEYDOWN",wParam, lParam);
return 0;
case WM_KEYUP:
//处理键盘上某一按下键被释放的消息
ShowKey (hwnd, 0, "WM_KEYUP", wParam, lParam);
return 0;
case WM_CHAR:
//处理击键过程中产生的非系统键的可见字符消息
howKey (hwnd, 1, "WM_CHAR", wParam, lParam);
return 0;
case WM_DEADCHAR:
//处理击键过程中产生的非系统键"死字符"消息
ShowKey (hwnd, 1, "WM_DEADCHAR", wParam, lParam);
return 0;
case WM_SYSKEYDOWN:
//处理系统键按下的消息
ShowKey (hwnd, 0, "WM_SYSKEYDOWN",wParam, lParam);
break;
case WM_SYSKEYUP:
//处理系统键抬起的消息
ShowKey (hwnd, 0, "WM_SYSKEYUP", wParam, lParam);
break;
case WM_SYSCHAR://处理系统键可见字符消息
ShowKey (hwnd, 1, "WM_SYSCHAR", wParam, lParam);
break;
case WM_SYSDEADCHAR://处理系统键"死字符"消息
ShowKey (hwnd, 1, "WM_SYSDEADCHAR", wParam, lParam);
break;
case WM_DESTROY:
//处理结束应用程序的消息
PostQuitMessage (0);
return 0;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam);
}
//函数:MyRegisterClass
//作用:注册窗口类
BOOL MyRegisterClass(HINSTANCE hInstance)
{
wnd.cbSize= sizeof (wnd);
wnd.style = CS_HREDRAW | CS_VREDRAW;
wnd.lpfnWndProc = WndProc;
wnd.cbClsExtra = 0;
wnd.cbWndExtra = 0;
wnd.hInstance = hInstance;
wnd.hIcon = LoadIcon (NULL, IDI_APPLICATION);?
wnd.hCursor = LoadCursor (NULL, IDC_ARROW);
wnd.hbrBackground = (HBRUSH)
GetStockObject (WHITE_BRUSH);
wnd.lpszMenuName = NULL;
wnd.lpszClassName = szAppName;
wnd.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
return RegisterClassEx (&wnd);
}
//函数:InitInstance
//作用:创建主窗口
BOOL InitInstance(HINSTANCE hInstance,int iCmdShow)
{
HWND hwnd;
hwnd = CreateWindow (szAppName,
"键盘消息监视程序",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL
);
if(!hwnd)
{
return FALSE;
}
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);
return TRUE;
}

Ⅸ 今天下了个按键精灵,有个 回车键按键虚拟码是多少,我弄不好啊,丢。怎写求高手

虚拟码主要用于后台操作,如果是前台操作的话,就可以
KeyPress "Enter", 1 //普通的,有些识别不了
KeyPressS "Enter", 1 //超级的,基本所有的都能识别

如果你要的是虚拟码做后台,可以输入下面一局代码,然后调试,你按下哪个按键,就弹出哪个按键的虚拟码。

MessageBox WaitKey
调试结果,13

DoubleSong2011为你解惑,记得采纳哦

Ⅹ 键盘 Alt 的虚拟键盘代码是多少。

13(度娘简略泥煤啊 就是13

阅读全文

与电脑模拟键盘编码相关的资料

热点内容
电脑上怎么下载班智达的软件 浏览:1160
无痕迹消除图片软件 浏览:722
免费小票软件 浏览:956
华为在哪里设置软件停止运行 浏览:963
用电脑键盘调节声音大小 浏览:1261
自动刷软件赚钱 浏览:1263
古装连续剧免费版 浏览:1417
工免费漫画 浏览:1149
手机软件专门储存文件 浏览:1511
uos如何用命令安装软件 浏览:1319
有线耳机插电脑麦克风 浏览:650
侏罗纪世界3在线观看完整免费 浏览:998
单个软件怎么设置名称 浏览:723
凤凰网电脑版下载视频怎么下载视频怎么下载 浏览:1388
明白之后如何免费获得无人机 浏览:833
如何解禁软件菜单 浏览:856
副路由器连接电脑视频 浏览:1352
内置wifi电视如何装软件 浏览:1109
手机换零免费雪碧 浏览:1590
国行苹果如何下载美版软件 浏览:1217