Thursday, July 29, 2010

计算机Numlock的秘密

一般来说电脑开机启动时NumLock键是启动的。我们可以在Bios中修改相应的设置。

NumLock键启动就亮的原理

在Windows系统启动时,它会从注册表下面读一个键值,然后根据这个键值的内容来决定是否启动NumLock键、CapsLK键、ScrLock键等。
这个键值是:
InitialKeyboardIndicators
它是REG_SZ类型,内容的含义是:
0 - Turn all indicators Off (NumLock, CapsLock, ScrollLock)
1 - Turn CapsLock On
2 - Turn NumLock On
3 - Turn CapsLock and NumLock On
4 - Turn ScrollLock On
5 - Turn CapsLock and ScrollLock On
6 - Turn NumLock and ScrollLock On
7 - Turn all indicators On (NumLock, CapsLock, ScrollLock)

也就是说:设置为0 则关闭NumLock键,设置为2则开启NumLock键

但是这个键值在用户登录前和登录后读取的路径是不一样的。


用户登录前的NumLock

在登录用户前,Windows是根据
HKEY_USERS\.Default\Control Panel\Keyboard 下InitialKeyboardIndicators
的内容来决定是否开启这些键值的。
注意:有些Win机器上是2147483648,即十六进制的0x80000000,最后一个位有效,即表示0的意思。

用户登录后的NumLock

在一个用户登录后,Windows是根据
HKEY_CURRENT_USER\Control Panel\Keyboard 下InitialKeyboardIndicators
的内容来决定是否开启这些键值的。

注意:Windows7在关机时会自动保存当前NumLock键的状态的,也就是你自己改无效,反正关机时它会再根据NumLock键的状态覆盖你设置的内容。


解决方案: 开机打开NumLock键

1.设置 HKEY_USERS\.Default\Control Panel\Keyboard 下InitialKeyboardIndicators 为2
2.关机前打开NumLock键
3.重启


解决方案: 开机不打开NumLock键

1.设置 HKEY_USERS\.Default\Control Panel\Keyboard 下InitialKeyboardIndicators 为0
2.关机前关闭NumLock键
3.重启


NumLockZ

为了方便设置,我写了一个NumLockZ的命令行程序。大家可以从这里下载:
http://www.box.net/shared/gxv5mqze5j
使用也很简单:
numlockz /on  打开numLockz键
numlockz /off 关闭numlockz键
numlockz /print 显示注册表键值
设置后需要大家按下numlock键并重启机器。


参考资源:

http://social.answers.microsoft.com/Forums/en-US/w7hardware/thread/7b48ae6f-fa9c-4bc2-8359-81e0c5e5d6a2
http://www.askvg.com/force-capslock-numlock-and-scrolllock-keys-behavior-using-windows-registry/

0 comments: