`
happmaoo
  • 浏览: 4496130 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

理解虚拟键码,扫描码和ASCII字符码

阅读更多
关键字:
虚拟键码:Virtual-key,扫描码:Scan code,ASCII字符码

在编写MFC应用程序过程中,需要对原有的CEdit作功能上的扩展,新生成的类CEditEx继承于CEdit,只允许用户输入数字和小数点。
要实现只允许用户输入数字和小数点,需要屏蔽非数字和小数点的字符,屏蔽工作在OnChar消息函数中进行:当按下键盘后,解发WM_CHAR消息,并进入OnChar消息函数,用::isdigit(nChar)验证数字,用nChar == '.'验证小数点,满足其一即调用父类OnChar函数继续处理:CEdit::OnChar(nChar, nRepcnt, nFlag)。

另外,一些按键如ESC、Tab键,当按下后并不能够触发WM_CHAR消息并进入OnChar消息函数,这时需要在PreTranslateMessage函数中用::TranslateMessage函数对pMsg消息翻译处理,其实也就是在这个函数中将虚拟键码(Virtua- Key) 即pMsg->wParam重新翻译为ASCII字符码,当翻译的ASCII字符码在0-127之间时,将向消息队列中递交字符消息WM_CHAR。
试一下:如果在调用::TranslateMessage函数后立刻用GetMessage截获消息MSG,将会发现下一个消息是WM_CHAR,并且wParam已被翻译为ASCII字符码。

理解1.
OnChar函数参数变量nChar是ASCII字符码,经过试验只有当按键所对应的ASCII码在0-127之间时才触发WM_CHAR消息,并进入OnChar消息函数,例如:键入上下左右键,是不会进入OnChar函数的。

理解2.
如果对计算机键盘I/O比较了解,应该知道键盘上每一个键对应一个扫描码,扫描码是由OEM生商制定的,不同厂商生产的键盘同样一个按键的扫描码都有可能出现不一致的情况,为摆脱由于系统设备不一致造成扫描码不一致的情形,通过键盘驱动程序将扫描码映射为统一的虚拟键码表示,如回车键定义为VK_RETURN,其16进制值为0x0D。
分享到:
评论

相关推荐

    键盘按键码

    键盘按键码通常有两种类型:扫描码和虚拟键码。扫描码是键盘硬件产生的原始码,每个键对应一个唯一的数值,用于区分不同的按键。虚拟键码是操作系统为了简化编程而定义的一套标准码,比如VK_A代表小写字母'a',VK_F1...

    获取键盘按键的ASCII码

    2. **在Java** 中,可以使用`java.awt.event.KeyEvent`类的`getKeyCode()`方法获取按键的虚拟键码(VK_XXX),然后通过`char`类型转换为对应的ASCII码。 3. **在Python** 中,`keyboard`模块可以监听键盘事件,`...

    SendInput模拟按键包含特殊字符的软件源码

    SendInput函数在Windows API中定义,它的主要参数包括虚拟键码(Virtual Key Code)、扫描码(Scan Code)和输入状态(Input Flags)。在处理特殊字符时,需要知道这些字符对应的虚拟键码,例如,ASCII码或VK_常量。...

    android keymaps

    - **键字符映射**:`keychars`文件则定义了特定键的物理扫描码对应的字符集,这允许对非ASCII字符的支持。 - **设备适配**:对于具有特殊按键布局的设备,如游戏控制器或特定地区的键盘,开发者需要创建符合设备...

    测试键盘的各个按键的值

    这类软件会显示键盘布局,当用户按下按键时,相应位置会高亮显示,同时显示按键的ASCII码或扫描码。这种方法可以帮助检测按键是否正常工作,是否存在死键或者按键响应不一致的问题。 5. 键盘事件处理:在编程中,...

    进一步精通Delphi模拟键盘

    这里的 `VK_LWIN` 是 Win 键的虚拟键码,`Byte('R')` 表示 'R' 字符的 ASCII 码,`KEYEVENTF_KEYUP` 标志表示释放键。 键盘常用代码一览表提供了各种键的虚拟键码或扫描码,包括鼠标按钮、特殊键以及字母和数字键。...

    jp.rar_按键_键盘代码源码

    在Windows系统中,键盘事件通常会返回一个虚拟键码(Virtual Key Codes,VKCodes),这些代码是预先定义好的整数值,比如"A"键的VKCode是65。而在ASCII编码中,每个字符都有一个对应的数字,如"A"的ASCII码是65。 ...

    易语言键盘记录源码

    实现这一功能时,开发者需要对每种按键的扫描码或虚拟键码进行处理,这些代码通常会映射到相应的ASCII值或Windows定义的虚拟键码(如VK_A代表字母A)。 至于鼠标右键,它的点击事件并不属于传统的键盘事件,而是...

    C++模拟键盘输入

    对于每个字符,你可以创建一个`INPUT`结构体,设置其`type`字段,并填充相应的`wVk`或`wScan`字段(根据是否使用ASCII码或扫描码)。然后,调用`SendInput`发送这个输入事件。 例如,模拟输入字母"A"的代码可能如下...

    VC++键盘与鼠标的消息处理

    处理键盘消息的关键在于编写消息处理函数,例如OnChar函数,它接受三个参数:nChar表示被按下的字符,nRepCnt表示重复次数,nFlags包含扫描码和标志位信息。开发人员可以通过这些参数来识别并响应特定的按键事件。 ...

    键盘的键值对照表全部按键的值都有

    它们没有直接的ASCII值,但在许多编程环境中,可以通过扫描码或虚拟键码来识别。 5. **控制键**:如Ctrl、Alt、Shift等,它们不直接生成字符,而是与其他键组合使用,以执行特定操作。例如,Ctrl+C用于复制,Alt+...

    (完整word版)C语言编写键盘记录器源代码.doc

    这些数组用于将键盘扫描码映射到可打印的字符。 - `SpecialKeys` 数组则包含了ASCII码对应的特殊键值,如退格键(8)、回车键(13)、Esc键(27)等。 2. **函数原型声明**: - `IsWindow` 函数可能是一个用来检查窗口...

    C# 模拟键盘输入 KeyBoardInput

    这里,`wVk`字段设置了虚拟键码,对于英文字符,可以直接用ASCII码。`dwFlags`为0表示按下,为2表示释放。要模拟完整的敲击动作,需要先按下再释放。 如果你需要模拟组合键,如Ctrl + A,可以这样实现: ```csharp ...

    模拟键盘按下和释放键的简便方法

    同时,对于非ASCII字符,可能需要使用`MapVirtualKey`函数来获取正确的扫描码。 多线程是另一个重要的概念,特别是在需要同时模拟多个键盘事件或与其他任务并行执行时。在Windows中,可以使用`CreateThread`或`_...

    VBHOOK区分大小写代码.rar_vb代码大小写_全局键盘

    在这个回调函数中,你需要判断键的状态,例如通过比较虚拟键码(Virtual Key Codes)和扫描码(Scan Codes)来判断是否按下了Shift键,以确定字母是否应转换为大写。 5. **API函数与数据类型**: 为了使用Windows ...

    stm32串口通信协议简单教程

    通过这种方式,STM32可以发送按键状态数据帧,例如“6MK3D45”,其中最后的“D45”是两个字节ASCII码,分别对应字符’4’和字符’5’,表示按键K3被按下和放开的动作。 除此之外,教程还说明了如何接收来自PC端的...

    强大的C#钩子。全局钩子,获取输入值。键盘值已处理

    - **`lparam`**: 包含了具体的键盘事件信息,如按键的虚拟键码、扫描码等。 ##### 4. 字符编码处理 在键盘钩子的应用中,经常需要处理字符编码问题,尤其是在ASCII码与实际按键值不一致的情况下。例如,在某些情况...

    C#实现可捕获几乎所有键盘鼠标事件的钩子类完整实例

    - `ToAscii` API函数用于根据虚拟键码和当前的键盘状态转换为ASCII字符。这在处理键盘事件时非常有用,可以获取用户输入的实际字符。 6. **抽象基类`GlobalHook`**: - 这个类提供了一种抽象的方式来处理键盘和...

    vc使用程序模拟键盘输入

    3. **模拟按键**:在`KEYBDINPUT`结构体中,`wVk`用于指定虚拟键码(如VK_A对应'A'键),`wScan`用于指定扫描码,一般情况下我们可以忽略。`dwFlags`可以用来控制按键状态,比如`0`表示按下,`KEYEVENTF_KEYUP`表示...

    API之网络函数---整理网络函数及功能

    FileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值 FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间 FileTimeToSystemTime 根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构 ...

Global site tag (gtag.js) - Google Analytics