为什么 Windows 额外定义了 F13 ~ F24 虚拟功能键
上网冲浪偶然看到一个 PowerToys 的 issue。具体问题就是 PC 微信启动后会一直模拟按下 F22 功能键,导致 PowerToys 设置的快捷键失效。解决方法是在 PowerToy 键盘管理器中屏蔽 F22 按键。
不清楚微信又在搞什么幺蛾子,倒是突然想到一个问题——为什么通用键盘明明只有 F1 ~ F12 总共 12 个功能键,而 Windows 虚拟按键代码却要从 VK_F1
一直定义到 VK_F24
呢?如果是为了预留扩充,那为什么不像苹果那样定义到 F19 ,或像 X11 那样定义到 F35 ?难道这又是 Windows 的某种历史包袱吗?

苹果键盘有 F13 ~ F19 功能键
经过一番搜索,还真被我找到了历史上一款拥有 24 个功能键的 IBM 电脑——IBM 3270 PC。

拥有 24 个功能键的 IBM 3270 PC
这款电脑在 1983 年发布,使用 PC DOS 2.0 操作系统,也就是 MS-DOS 的换皮系统。难道从 DOS 时代起,微软的操作系统就默认支持 24 个功能键吗?回忆了一下 DOS 时代的编程,获取按键应该是通过 INT16
中断,然后读取 AX 寄存器的高位获取扫描码来确定物理按键。找来了 BIOS 的键盘扫描代码表,似乎也只定义了 F1 ~ F12 的按键。
我不太熟悉 DOS 编程,所以也不好妄下定论。那么可以换个角度——如果证实早期版本的 Windows 不支持 24 个虚拟功能键,那么也可以证实和 DOS 时代的历史传承无关了。可惜 Windows 早期 的 SDK 已经无法在微软的官网上找到了,不过好在一个叫 WinWorld 的网站提供了 Windows 1.0 到 Windows 95 的 SDK 下载。检查 SDK 的代码发现:从1.0 到 3.0 ,Windows 只支持 VK_F1
~ VK_F16
16 个功能键,直到 Windows 3.1 才开始支持 VK_F1
~ VK_F24
24 个功能键。
考虑到 1987 年发布的 X11 规范已经支持 35 个功能键了,发布于 1992 年的 Windos 3.1 仅支持 24 个功能键还是有些保守了。至于为何是 24 个功能键,应该也是当时一拍脑门的事情,和兼容性关系不大。