• 通过注册表修改键盘按键的映射


    Scancode Map的妙用,按键随意变换!

    在Windows XP/Windows 2000 系统中,提供了一种新的键盘扫描码映射方法,使你能随意地设置键盘键位的布局,这就是注册表中的 “Scancode Map”我们巧妙利用“Scancode Map”就可将普通键盘改造成随心随意的个性化键盘。
    为了正确设置,我们有必要先了解一下“Scancode Map”(扫描码映射)。
    “Scancode Map”是注册表中[HKEY_LOCAL_MacHINESYSTEMCurrentControlSetControlKeyboard Layout]中的一个二进制键值(默认没有,需新建),并且有固定的格式。
    Scancode Map 代码的一般格式是:“hex:00,00,00,00,00,00,00,00,|02|,00,00,00,|映射之后的扫描码(XX XX),原扫描码(XX XX)|00,00,00,00”。
    其含义为:
    前8个00(DWord两个0)是版本号和头部字节,
    接下来的“02”表示映射数,其最小为值为“02”,表示只映射一组(这里的数值是映射数目加上末尾用作结尾的“00,00,00,00”,因此总是比实际的映射数目大一),若要映射多组,只需增加相应的值即可,如映射2组其值应为“03”,3组为“04”。
    后边代码每4个是一组:前两个是映射后键位的扫描码,后两个是键位原扫描码。如果要交换两个键,则一个有两组映射,四个值的排列形式是:键A,键B,键B,键A——它表示:键A成为键B,键B成为键A。
    最后以“00,00,00,00” 结尾。
    注意:在注册表中输入时,需要将扫描码的高低字节交换一下。
    另外,如果想要某个键失效,将它的扫描码映射为“00 00”即可。

    若要恢复键盘键位原来的布局,只需定位于注册表[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout],删除"Scancode Map"键值

    特别说明:
    1. 在目前的Windows版本下面,对键盘映射是全局的,而不是针对某个用户的,如果您修改添加或者删除了某个映射,那么不管哪个用户使用,键盘都发生了变化;
    另外,如果一台电脑有多个键盘,那这些键盘都会产生同样的变化。
    2. 在XP上不能屏闭POWER SLEEP WAKE UP 这三个键。(没有亲自测试,笔记本上没有这三个键,如果真不行就扣掉吧 ------ 开玩笑,在台式机上这三个键通过bios设置应该可以把相应功能禁用掉)
    3. thinkpad 上的“Fn”键是不能被映射的,因为它不能被OS识别,所以不能使用上面的方式进行设置。thinkpad新版的bios里面提供了一个功能,让左侧的“Fn”键和相邻的“Ctrl”键进行功能互换,感觉用处不是很大,有需要的朋友可以去试试看。(如果在笔记本的 bios上找不到这个功能的话,需要刷新版bios,操作很简单,不要恐惧)
    导入或设置或修改或删除注册表键值后,重启你的电脑,改变就生效了。

    也可以用将下面的文本存成“scancode.reg”,双击导入注册表。键值可通过查上面提到的键位表查询,找到你要替换的 Scan Code码,把##,##替换掉就可以了。
    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout] 
    "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,##,##,##,##,00,00,00,00 

    了解了“Scancode Map”之后,我们就可以来利用添加功能键了。比如WIN键扫描码为:“E0 5B”,Esc为“00 01”,左边的Ctrl为“00 1D”,更详细的扫描码请见键盘扫描码。

               举例:

    比如:前面提到的IBM ThinkPad键盘,为了把那个浏览器网页前后浏览的键禁止,可以设置为: 
    "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,00,00,6A,E0,00,00,69,E0,00,00,00,00 

    比如:说我们想把F9,F10键修改成为音量调整键,通过查表,可以得知:
    F9、F10扫描码分别为(00,43)、(00,44),
    Volume Up、Volume Down的扫描码分别为(E0,30)、(E0,2E),
    这样只要将Scancode设置为如下就可以了: "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,30,E0,43,00,2E,E0,44,00,00,00,00,00 
    ( 含义为:          |    版本号和头部字节 | 两组映射 |   第一组 | 第二组 | 结尾终止 | )

    我是把“后退”和“前进”两个按键映射为“上翻页”和“下翻页”,注册表文件如下:
    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout]
    "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,49,e0,6a,e0,51,e0,69,e0,00,00,00,00

    再次说明:所有对注册表的修改,必须在重新启动电脑后,才能生效。 

    http://blog.chinaunix.net/uid-174325-id-3912617.html

    --------------------------------------------------------------------------------

    Scancode Map 注册表项来实现键盘按键映射。

     位于注册表的:

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout 下新建一个二进制值项:  "Scancode Map"

    这个项目可实现对键盘按键的映射。这里映射的意思可理解为“替换”,可将任意一键替换成其它键。

    [项目格式]

    以16进制表示,更分为五个部分,每个逗号之间都为一个字节。

    "Scancode Map" = 00,00,00,00,00,00,00,00,   02,00,00,00,   01,00, 02,00,    00,00,00,00 

    1. 8个字节。 这是版本信息号。照例写就好。
    2. 4个字节。 这是映射键的总数。按照二进制的读写规则,低位在左,高位在右。02 00 00 00 这个数实际就是:00 00 00 02 。从 02 开始,一个映射键是 02 ,两个是03 ,依次递加,十个是 0B 。
    3. 2个字节。 表示替换后按键的”扫描码“。如:ESC 键的扫描码是 01 ,所以就表示 01 00 。再如 左Ctrl键扫描码是 1D 00, 而右Ctrl键是 1D E0 。
    4. 2个字节。 表示原按键的”扫描码“。格式同上。
    5. 以四个 00 结束。
     

    [键盘扫描码]

    以十六进制表示,分两部份,0X后面两个数是扫描码,最后两个数是 ASCII 码(可忽略)。如 0x011b          ESC 扫描码是01。

    扫描码    键

    0X011B ESC 
    0X3B00 F1 
    0X3C00 F2 
    0X3D00 F3 
    0X3E00 F4 
    0X3F00 F5 
    0X4000 F6 
    0X4100 F7 
    0X4200 F8 
    0X4300 F9 
    0X4400 F10

    主键盘区: 
    0X2960 ~ 
    0X0231 1 
    0X0332 2 
    0X0433 3 
    0X0534 4 
    0X0635 5 
    0X0736 6 
    0X0837 7 
    0X0938 8 
    0X0A39 9 
    0X0B30 0 
    0X0C2D - 
    0X0D3D = 
    0X2B5C " 
    0X0E08 退格键 
    0X0F09 TAB 
    0X1071 Q 
    0X1177 W 
    0X1265 E 
    0X1372 R 
    0X1474 T 
    0X1579 Y 
    0X1675 U 
    0X1769 I 
    0X186F O 
    0X1970 P 
    0X1A5B [ 
    0X1B5D ] 
    0X1E61 A 
    0X1F73 S 
    0X2064 D 
    0X2166 F 
    0X2267 G 
    0X2368 H 
    0X246A J 
    0X256B K 
    0X266C L 
    0X273B ; 
    0X2827 ' 
    0X1C0D 回车 
    0X2C7A Z 
    0X2D78 X 
    0X2E63 C 
    0X2F76 V 
    0X3062 B 
    0X316E N 
    0X326D M 
    0X332C , 
    0X342E . 
    0X352F / 
    0X3920 空格键


    右边数字键盘: 
    0X5200 INSERT 
    0X4700 HOME 
    0X4900 PAGE UP 
    0X5300 DELETE 
    0X4F00 END 
    0X5100 PAGEDOWN 
    0X4800 上箭头 
    0X4B00 左箭头 
    0X5000 下箭头 
    0X4D00 右箭头 
    0X352F / 
    0X372A * 
    0X4A2D - (注意,这是数字键盘的)
    0X4737 7 
    0X4838 8 
    0X4939 9 
    0X4B34 4 
    0X4C35 5 
    0X4D36 6 
    0X4E2B + 
    0X4F31 1 
    0X5032 2 
    0X5133 3 
    0X5230 0 
    0X532E DEL

    左 Crtl 扫描码是 1D ,表示 1D 00 。 右 Ctrl 键扫描码是 E01D,表示 1D E0。

    左 ALT 扫描码是 38 ,表示 38 00 。 右 ALT 键扫描码是 E0 38,表示 38 E0。

    左 Shift 扫描码是 2A ,表示 2A 00 。 右 Shift 键扫描码是 36 ,表示 36 00

    [示例]

    1.屏蔽左侧WIN键

      "Scancode Map"=00,00,00,00,00,00,00,00,02,00,00,00,00,00,5B,E0,00,00,00,00 

    2.屏蔽右侧WIN键

      "Scancode Map"=00,00,00,00,00,00,00,00,02,00,00,00,00,00,5C,E0,00,00,00,00

    3.屏蔽左右WIN两个键

      "Scancode Map"=00,00,00,00,00,00,00,00,03,00,00,00,00,00,5B,E0,00,00,5C,E0,00,00,00,00

    4.替换左Crtl键为左Alt键

      "Scancode Map"=00,00,00,00,00,00,00,00,02,00,00,00,38,00,1D,00,00,00,00,00 

    http://www.cnblogs.com/Rainr/archive/2012/01/21/2328046.html

  • 相关阅读:
    ruby中的特殊字符
    android and webview
    ActiveRecord::Base.establish_connection
    Ruby 创建目录
    不能手动输入或粘贴
    eclipse找不到 help>software update>find and install
    PL/SQL 创建、查看、操作用户
    XML文件
    javascript 获取页面高度(多种浏览器)(转)
    Eclipse to android
  • 原文地址:https://www.cnblogs.com/findumars/p/5037815.html
Copyright © 2020-2023  润新知