【背景描述】 家里这台机用起来一大不之处就在于键盘的结构(当然,把键盘当成机子的一部分未免过于牵强)。和学校那边那台的主要不同之处就在于中间功能键部分的排列,那一个是3×4的(顶部一排是power、sleep和wakeup),而家里这个是3×3的,更甚的是主键区、功能键区和数字键区三个键区居然是没有间隔的。这样一来,退格键<-和insert键就并在一块了,这对于误键率极高的我来说简直是一个灾难。退格键按错为insert键,不但删不了东西,而且把输入状态变成了改写,却又没有状态指示,错上加错,几近崩溃。屡屡的出错终于让我痛下决心,要想方设法解决这个问题。【问题分析】 insert键是以前文本命令式操作系统中常用的功能切换按键,用于切换insert/overwrite状态。事实上现在用的人已经很少了,只是因为标准和习惯保留了下来,这样的键盘结构设计是不够科学的。在现在这种多媒体系统普及的环境下,比起更多常用的系统功能,insert键(还有同样极少用到的scroll lock、pause break等键)早就应该退出它的历史舞台,让位给其他的功能了。 而且,与caps lock、scroll lock、num lock不同,insert/overwrite状态完全没有状态指示,只是在一些文本编辑器(如记事本、word等)的状态栏中有这么一个小格显示状态而已,可是又有谁去注意呢。甚至于没有用过overwrite状态的人还要郁闷好久,为什么打一个字后面的字会消失了,摸不着头脑。 其实为了改进键盘结构,生产商也不是没有花过心思。近年来新式键盘层出不穷,结构也千变万化,确实都以科学、舒适为出发点。长退格,小回车,多媒体键,等等都是改进措施。但是正因为缺少一个标准,反而让用户无从适应,每换一个键盘都要花上一段时间来习惯。【解决方法】 搜索一下可以找到一些方法,不外乎下面几种: 1、直接拔掉insert键的键帽,以绝后患。这么做也太绝了,像我这么爱护东西的人怎么忍心做这种事。 2、用超级兔子设置,超级兔子魔法设置 -> 个性化 -> 键盘 -> 屏蔽/重设键位。失败,还出错(按退格键变成0),原因不解。 3、用软件keytransformation,可以屏蔽按键、设置任意按键映射、设置组合键映射、设置按键序列映射等等,功能十分强大。但主要问题是必须在软件运行时设置才会起作用,不爽。 4、用软件keytweak,可以通过修改注册表的方法屏蔽和重映射键盘键位。这个方法最好,但是我又觉得直接这么做太表层了,应该研究得更深入一点。 下面附一个keytweak的下载地址,安装设置过程都很简单很人性化。如果嫌麻烦或者下载不了,可以把下面分隔线内的文本保存为.reg文件,然后执行写入注册表,重启系统即可。---------- 我是一条分隔线,请不要复制我 ----------windows reg**try editor version 5.00[hkey_local_machine\system\currentcontrolset\control\keyboard layout]"scancode map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,0e,00,d2,00,0e,00,52,e0,00,00,00,00---------- 我是一条分隔线,请不要复制我 ---------- 如果是其他的键位映射,还是老老实实用keytweak设置吧,或者看看下面的深入研究部分,也会有相应的解决方案。好,问题到这里基本解决了。【深入研究】 在keytweak中查看映射信息,可以看到下面的对话框。 按照对话框中的信息找到注册表中对应的项hkey_local_machine\system\currentcontrolset\control\keyboard layout,果然有一个键scancode map,键值正是对话框中的二进制信息:00,00,00,00,00,00,00,00,03,00,00,00,0e,00,d2,00,0e,00,52,e0,00,00,00,00。搜索一下这个项和键名,找到了一些关于windows键盘扫描码重映射的文章,这时才一下明朗了。 原来这个键在注册表里是不存在的,创建后重启,系统会自动调用这个键值进行键位扫描码重映射,否则按照默认的映射标准响应键盘事件。下面有两篇文章详细介绍了windows键位扫描码映射的原理和方法,有兴趣的可以参考研究一下。另一篇是键盘上键位的扫描码表,转为16进制后可以直接用于上面的重映射方法。 20210311