Board logo

标题: 在dos里面怎么自动打开capslock [打印本页]

作者: hudisk     时间: 2006-12-11 22:11    标题: 在dos里面怎么自动打开capslock

在dos里面怎么自动打开capslock
num lock可以在config.sys里配置
作者: redtek     时间: 2006-12-12 21:30
下面这个贴子有你需要的工具(这个工具才几KB大小),是开启大写状态、关闭大写状态。

(工具在下面这个贴子的第9楼可以下载)
(里面同时包含源代码)
(MS-DOS 6.22 版本下测试通过)



启动时打开大写键
http://www.cn-dos.net/forum/view ... =%E5%A4%A7%E5%86%99
作者: houfujin     时间: 2006-12-29 11:12
我用QuickBASIC编写了一个程序,可以控制键盘指示灯的亮与灭。
作者: hebecoco     时间: 2007-1-2 23:36
40:17   byte   Keyboard flag byte 0 (see KB FLAGS)
      |7|6|5|4|3|2|1|0| keyboard flag byte 0
       | | | | | | | `--- right shift key depressed
       | | | | | | `---- left shift key depressed
       | | | | | `----- CTRL key depressed
       | | | | `------ ALT key depressed
       | | | `------- scroll-lock is active
       | | `-------- num-lock is active
       | `--------- caps-lock is active
       `---------- insert is active

用pokeb(0x40.0x17,0x40)就可以了
作者: tantan2010     时间: 2007-1-5 10:38
楼上的强人
作者: lxmxn     时间: 2007-1-6 13:46


  Quote:
Originally posted by hebecoco at 2007-1-2 10:36:
40:17   byte   Keyboard flag byte 0 (see KB FLAGS)
      |7|6|5|4|3|2|1|0| keyboard flag byte 0
       | | | | | | | `--- right shift key depressed
       | | | | | | `---- left shift key depres ...


  这个怎么用呢?

作者: redtek     时间: 2007-1-6 22:52
在内存地址 0040:0017 处这一个字节表示当前键状态。这一个字节是利用二进制的1或是0来表示键盘状态的。

0表示无开启状态,1表示开启锁定状态。

如果按下某个(4楼hebecoco兄给出的资料)中所示的按键,所示地址 0040:0017 就会被中断例程改写,置示当前的按键状态。

实验:

  Quote:
只有右侧小键盘上的 NumLock (数字输入状态)的灯亮着:
内存地址 0040:0017 处 的 20H ,转成二进制为: 00100000
第 5 位为1(为真)表示开启,其它位均为0。


-d 40:17
0040:0010                       20-00 00 32 00 32 00 64 20
0040:0020  20 39 34 05 34 05 08 0E-30 0B 3A 27 31 02 37 08
0040:0030  0D 1C 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0040:0040  AE 00 C3 00 00 00 00 00-00 03 50 00 40 1F 00 00
0040:0050  00 06 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0040:0060  07 06 00 D4 03 29 30 00-00 00 00 00 EC 71 08 00
0040:0070  00 00 00 00 00 00 08 00-14 14 14 14 01 01 01 01
0040:0080  1E 00 3E 00 31 08 00 60-F9 11 0B 00 50 01 00 00
0040:0090  00 00 00 00 00 00 10

然后再按一下右键小键盘上的 NumLock 键,关掉数字状态(此时灯不亮了)
00H 转二进制是:00000000 ,全是0,表示未开启。


-d 40:17
0040:0010                       00-00 00 2E 00 2E 00 08 0E
0040:0020  08 0E 34 05 30 0B 3A 27-31 02 37 08 0D 1C 37 08
0040:0030  0D 1C 61 1E 08 0E 64 20-20 39 33 04 30 0B 00 00
0040:0040  F2 00 C3 00 00 00 00 00-00 03 50 00 40 1F 00 00
0040:0050  00 10 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0040:0060  07 06 00 D4 03 29 30 00-00 00 00 00 A8 78 08 00
0040:0070  00 00 00 00 00 00 08 00-14 14 14 14 01 01 01 01
0040:0080  1E 00 3E 00 31 08 00 60-F9 11 0B 00 50 01 00 00
0040:0090  00 00 00 00 00 00 10

然后按一下左侧键盘上的 CapsLock (启动大写状态),则下面是 40H,
转二进制是:01000000  第6位是1,表示大写启动状态。

-D 40:17
0040:0010                       40-00 00 1E 00 1E 00 08 0E
0040:0020  08 0E 34 05 30 0B 3A 27-31 02 37 08 0D 1C 44 20
0040:0030  20 39 34 05 30 0B 3A 27-31 02 37 08 0D 1C 00 00
0040:0040  53 00 C3 00 00 00 00 00-00 03 50 00 40 1F 00 00
0040:0050  00 1A 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0040:0060  07 06 00 D4 03 29 30 00-00 00 00 00 47 7E 08 00
0040:0070  00 00 00 00 00 00 08 00-14 14 14 14 01 01 01 01
0040:0080  1E 00 3E 00 31 08 00 60-F9 11 0B 00 50 01 00 00
0040:0090  00 00 00 00 00 00 10

所以,最后用 Debug

E  40:17  40


(Windows CMD 下无效,MS-DOS下有效)

这一个命令就可以直接改写内存地址 0040:0017 处这一个字节的键盘表示状态。
并将键盘改写为大写锁定状态: 二进制位的第6位为 1 ,表是开启功能,则 01000000 的16进制(好读)就是 40,所以把40填进那个内存地址就行了~:)

4楼hebecoco兄给出的 “pokeb(0x40.0x17,0x40)” 是高级语言的操作方法,根据hebecoco兄4楼详细的说明资料,可以用C等可以写、操作内存的高级语言来完成功能~:)
作者: lxmxn     时间: 2007-1-7 01:49

  强啊,学习了。