虚拟键码
- 虚拟键码
虚拟键码保存在WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN和WM_SYSKEYUP讯息的wParam参数中。此代码标识按下或释放的键。
中文名虚拟键码
保存在WM_KEYDOWN等
程 式Windows程式
代码标识按下或释放的键
目录
1简介
2虚拟键码
键盘的扫描码、虚拟码:
1简介
虚拟指的是假定存在于思想中而不是现实世界中的一些事物,也只有熟练使用DOS组合语言编写应用程式的程式写作者才有可能指出,为什么对Windows键盘处理如此基本的键码是虚拟的而不是真实的。
对於早期的程式写作者来说,真实的键码由实际键盘硬体产生。在Windows文件中将这些键码称为「扫描码(scan codes)」。在IBM相容机种上,扫描码16是Q键,17是W键,18是E、19是R,20是T,21是Y等等。这时您会发现,扫描码是依据键盘的实际布局的。Windows开发者认为这些代码过於与设备相关了,於是他们试图通过定义所谓的虚拟键码,以便经由与装置无关的方式处理键盘。其中一些虚拟键码不能在IBM相容机种上产生,但可能会在其他制造商生产的键盘中找到,或者在未来的键盘上找到。
2键盘的扫描码、虚拟码:
当用户按下某个键时,
1.键盘会检测到这个动作,并通过键盘控制器把扫描码(scan code)传送到计算机;
键盘扫描码跟具体的硬件有关的,不同厂商对同一个键的扫描码有可能不同。
2.计算机接收到扫描码后,将其交给键盘驱动程序;
3.键盘驱动程序把这个扫描码转换为键盘虚拟码;
虚拟码与具体硬件无关,不同厂商的键盘,同一个键的虚拟码总是相同的。
3.然后,键盘驱动程序把该键盘操作的扫描码和虚拟码以及其它信息传递给操作系统;
4.操作系统将获得的信息封装在一个键盘消息中,并把该键盘消息插入到消息列队。
5.通过Windows的消息系统,该键盘消息被送到某个窗口中;
6.窗口所在的应用程序接收到消息后,可以了解到有关键盘操作的信息,然后决定作出一定的响应
键盘消息:WM_KEYDOWN
nVirtKey = (int) wParam; // 虚拟码
lKeyData = lParam; // 键盘操作的相关信息
键盘消息WM_KEYDOWN的第二个参数lParam比较复杂
其作用是指定重复次数、扫描码、扩展键标记、上下文环境码、前键状态标记、转换状态标记等
lParam: 总长4字节,32位
0–15位:用于指定当前消息的重复次数。当用户按下某个键持续一段时间的话,
该值是自动计数的按下某键的次数;若按键时间很长,则会发出多个消息,
且重复次数不会累计
16–23:指定扫描码
24:指定是否该键是一个扩展键(如alt、ctrl),若值为1表示是扩展键,否则其值为0
25–28:保留
29:指定上下文环境码。对于WM_KEYDOWN、WM_KEYUP消息,其值总为0,
对WM_CHAR消息,如果同时alt键被按下,则值为1,否则值为0.
30:指定前键状态。如果消息发送前该键是按下状态,其值为1,否则为0
31:指定转换状态,对于WM_KEYDOWN,其值总为0;
对于WM_CHAR,如果该键被释放,则其值为1,否则为0.
开放分类
贡献者