第 499 期:如何区分数字小键盘按下的是 0 还是 Insert 按键
最近,有一个爱动脑筋的人,想知道如何在 WM_KEYDOWN 消息中区分数字键盘上的 0 和键盘顶部 0。同时,我们顺便也区分一下数字键盘 0 和 Insert 键。
请看下面这张表,当您按下数字键盘的 0 时,在 WM_KEYDOWN 消息中会得到如下内容。

好的,所以当 wParam 是 VK_NUMPAD0 时,很明显我们得到了数字小键盘的 0。但当它是 VK_INSERT 时,我们不确定这是数字小键盘在 NumLock 关闭的情况下的 0,还是专用的 Insert 键。
为此,我们可以查看 lParam,特别是第 24 位,它被记录为 “扩展键” 位。
让我们暂时回到 1983 年,那个时候,IBM PC XT 键盘问世。在主键盘的左侧是一组编号功能键,右侧是数字小键盘。但数字小键盘上的按键需要完成双重功能,因为箭头键和其他编辑键被覆盖在它们上面。

您可以通过切换 NumLock 来选择希望使用数字键还是箭头/编辑键。
IBM PS/2 键盘通过在主键盘和数字小键盘之间插入一组按键扩展了键盘的按键。这组按键包含箭头键和编辑键。这个键盘布局与今天大多数键盘使用的布局非常相似,所以我想它还是挺耐用的。
为了兼容性,键盘上的附加按键被报告为与它们所对应的数字小键盘按键相同,但带有一个额外的标志字节,以表示它们是 “扩展” 键。它们之所以被称为 “扩展”,是因为在原始键盘中没有这些按键。
这个 “扩展” 术语从那以后一直沿用。因此,我们可以通过是否得到扩展键来区分专用的 Insert 键和数字小键盘关闭 NumLock 时的 0 键。如果是扩展键,那么它来自编辑键;如果不是,那么它来自数字小键盘。

下次,我们将讨论如何在 WM_CHAR 消息中区分数字键盘的 0 和键盘顶部的 0。这会稍微复杂一些。
最后我再讲个笑话:那个 PrintScreen 键很容易误用,因为它紧挨着 Shift 键。如果您的手指稍微偏了,按到了 Shift 键和 PrintScreen 键,您就会不小心请求将屏幕内容发送到打印机。这个时候,您的电脑就会一直挂起,直到您打开打印机,以便得到一个您根本不想要的打印输出。(如果您没有打印机,那就惨了。)
相关推荐
- 第 897 期:联想首款搭载英伟达 RTX Spark 技术的二合一笔记本
- Posted on 07月30日
- VS2022 17.8 功能更新:现已支持 C11 线程
- Posted on 10月08日
- 实战经验:本地yum源制作过程记录
- Posted on 02月27日
- 第 538 期:您很快就可以在 Windows 11 上快速切换深色模式和浅色模式
- Posted on 03月08日



评论已关闭。