回 帖 发 新 帖 刷新版面

主题:请教各位:如何控制键盘的三盏指示灯?(Nun、Cap、Scr)

[em15]请教热心的各位网友啦!
    我想用QBASIC语句来控制键盘的Nun、Cap、Scr三个键的状态。也就是想控制指示灯的亮和灭。
    心急吖!哪位可以帮帮我,用哪个语句呢?[em15]

回复列表 (共23个回复)

沙发

OUT &H64,控制号
不知

板凳

控制号是多少?

for i=1 to 888
out &H64 i
next i
(不行,运行了键盘灯也没改变!)

3 楼

在帮助文件里面有的

4 楼

上面的人兄是指《编程相关知识简介》里面的键盘篇吧。 我按着那个程序试过了,键盘一点反应都没。也不明白里面的&H17、&H40、&H20 和SEG分别是什么含意。 键盘的端口应该是&H60的吖,为什么会用到&H17的呢? 真的弄不明白!! 
  有谁可以帮帮手,看看能不不搞明白? 心急吖!!!!

5 楼

NoNoNo,
我的意思是:
请你在QB编辑器内
按<shift> + <F1>键进入帮助页面
按 <ALT> + <S>,<F> 键进入查找对话框
输入 CapsOn 后回车
你看到的是设置大小写那盏灯的例程
至于其他的,嘿嘿,慢慢试.试坏了别怪我.

6 楼

找不到 提示"match not found"

7 楼

嘿嘿,还是说明一下吧

这三盏灯是根据一个标志来决定的
这个标志字节在0段的&H417的位置上
长为8个二进制数,如下所示:

  0 1 1 1 0 0 0 0
    | | |
    | | Scroll Lock 的标志位
    | Num Lock 的标志位
  Caps Lock 的标志位

这个8个二进制数的意思就是
第二位代表大小写的那盏灯的亮灭,0就是灭,1就是亮
第三位代表数字键盘的灯的亮灭,  0 = 灭, 1 = 亮
第四位表示屏幕锁的标志.......................

把这个字节读出来检查标志位上的值就可以知道目前灯的状态
比如: 01110000 就是表示三盏灯都亮了
      00000000 就是三盏灯全灭了
      00100000 就是只有键盘灯亮

需要更改某盏灯或者几盏灯的亮灭状态,把标志位的值改过来就可以了
比如你要打开大写灯,就把第二位的值置1就可以了,
怎样置1 ?  怎样置0 ?

def seg=0

poke &H417,peek(&H417) or &H70   '[color=FF00FF]灯全亮[/color]
poke &H417,peek(&H417) or &H40   '[color=FF00FF]亮大小写灯[/color]
poke &H417,peek(&H417) or &H20   '[color=FF00FF]亮数字灯[/color]
poke &H417,peek(&H417) or &H10   '[color=FF00FF]亮屏幕灯[/color]

poke &H417,0                     '[color=FF00FF]全置0,全弄灭了[/color]
poke &H417,peek(&H417) and &HBF  '[color=FF00FF]灭大小写灯[/color]
poke &H417,peek(&H417) and &HDF  '[color=FF00FF]灭数字灯[/color]
poke &H417,peek(&H417) and &HEF  '[color=FF00FF]灭屏幕灯[/color]

def seg

需要注意的是,如果你改了其他位的值的话,
你要小心你的键盘会错位或者失灵喔.
还有如果在XP的系统中,有可能写不进去的.
因为它有保护机制的.

8 楼

细读中,一会儿再复你。先谢。

9 楼

嘿嘿,我其实也不懂的
但脑海中隐约有印象在HELP里面有的
你在QB中输入一个关键词def seg后按<F1>键
转到 EXAMPLE,那里就有的了
然后我就翻出上面那些东西来了.
其实很多的东西都可以凭空摸索出来的.
我没学过太多书本的东西,
很多时候看看参考书是有好处的.

10 楼

我按代码照输来运行,还是不行。
  你运行时,指示灯有改变吗?它会不会是:只是改变了内存里的值,而对键盘灯没有影响呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册