中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-01 20:47
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行
DOS疑难解答 & 问题讨论 (解答室) » 在dos里面怎么自动打开capslock
可打印版本  1,695 / 7
第1楼 hudisk 发表于 2006-12-11 22:11
初级用户 发帖 13 积分 34
在dos里面怎么自动打开capslock
在dos里面怎么自动打开capslock
num lock可以在config.sys里配置
第2楼 redtek 发表于 2006-12-12 21:30
金牌会员 发帖 1,147 积分 2,902
下面这个贴子有你需要的工具(这个工具才几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
第3楼 houfujin 发表于 2006-12-29 11:12
新手上路 发帖 8 积分 16
我用QuickBASIC编写了一个程序,可以控制键盘指示灯的亮与灭。
第4楼 hebecoco 发表于 2007-01-02 23:36
初级用户 发帖 25 积分 63
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)就可以了
第5楼 tantan2010 发表于 2007-01-05 10:38
新手上路 发帖 4 积分 6
楼上的强人
第6楼 lxmxn 发表于 2007-01-06 13:46
版主 发帖 4,938 积分 11,386
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楼 redtek 发表于 2007-01-06 22:52
金牌会员 发帖 1,147 积分 2,902
在内存地址 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等可以写、操作内存的高级语言来完成功能~:)
第8楼 lxmxn 发表于 2007-01-07 01:49
版主 发帖 4,938 积分 11,386

  强啊,学习了。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023