中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-30 23:11
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 在dos里面怎么自动打开capslock 查看 1,652 回复 7
楼 主 在dos里面怎么自动打开capslock 发表于 2006-12-11 22:11 ·  中国 广东 深圳 宝安区 电信
初级用户
积分 34
发帖 13
注册 2006-12-10 22:21
19年会员
UID 73132
性别 男
状态 离线
在dos里面怎么自动打开capslock
num lock可以在config.sys里配置
2 发表于 2006-12-12 21:30 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
下面这个贴子有你需要的工具(这个工具才几KB大小),是开启大写状态、关闭大写状态。

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



启动时打开大写键
http://www.cn-dos.net/forum/viewthread.php?tid=23973&fpage=1&highlight=%E5%A4%A7%E5%86%99
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
3 发表于 2006-12-29 11:12 ·  中国 辽宁 锦州 联通
新手上路
积分 16
发帖 8
注册 2006-02-07 14:35
20年会员
UID 49981
状态 离线
我用QuickBASIC编写了一个程序,可以控制键盘指示灯的亮与灭。
4 发表于 2007-01-02 23:36 ·  IANA 局域网IP(Private-Use)
初级用户
积分 63
发帖 25
注册 2006-12-24 03:33
19年会员
UID 74402
性别 男
状态 离线
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)就可以了
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
redtek +5 2007-01-06 22:53
5 发表于 2007-01-05 10:38 ·  中国 广东 佛山 电信
新手上路
积分 6
发帖 4
注册 2006-10-19 09:42
19年会员
UID 66847
状态 离线
楼上的强人
6 发表于 2007-01-06 13:46 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
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 ...


  这个怎么用呢?
7 发表于 2007-01-06 22:52 ·  中国 北京 东城区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
在内存地址 0040:0017 处这一个字节表示当前键状态。这一个字节是利用二进制的1或是0来表示键盘状态的。

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

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

实验:

只有右侧小键盘上的 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等可以写、操作内存的高级语言来完成功能~:)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
lxmxn +10 2007-01-07 01:48
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
8 发表于 2007-01-07 01:49 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  强啊,学习了。
论坛跳转: