老婆控制欲太强:问下各位

来源:百度文库 编辑:高考问答 时间:2024/04/29 19:39:58
问下各位?
在C里是用DELAY来实现发音的长短的。但是,如果是时实的程序,比如用按键盘不放来实现发音的长短。该怎么实现呢?用BOISKEY好象不行(也可能我用的不对),
求高手指点!
检测到key_up的事件.
说到点了,但是怎么检测呢?
谢谢指点。

我去查了下书:键盘有2内中断,09H和16H2个,没有专门检测UP事件的!,这样从原理上说只能通过不断的检测键盘的输入是否为空。
原理很简单,但是怎么用语句来实现呢?高手指点~~

那样写不行,声音停不下来。SOUND()函数开了就是一直发音,如果用WHILE的话,循环里就要加NOSOUNG(),但是加了的声音就是断断续续的。
还是谢谢三月廿四

"提问者:aa7472888 - 魔法师 四级"你好!

键盘有2内中断,09H和16H2个,没有专门检测UP事件的!,这样从原理上说只能通过不断的检测键盘的输入是否为空。
==========================================
的确如此,那就用循环呗。比如
do
{
SOUND() //发声(伪代码)
}
while (KEY_is_being_pressed) //伪代码
我不是高手,你觉得这个方法行吗?

有一个可行的办法是按下一个键时开始播放声音,按其它键时停止前面的声音,或是开始播放新的声音。
我以前就是用的这个方法。
不知道bioskey能否检测到key_up的事件,即按键弹起的中断?我再查查吧,稍侯补充!
找到了bioskey的详细介绍,不知对你是否有用:

bioskey函数只有一个参数cmd,类型为int,根据cmd值的不同,此函数有3个用法。

如果cmd为1,则函数的功能是检查键盘上是否有键被按下,如果没有,返回0,如果有,返回非零值。

如果cmd为0,返回按键的代码。返回值中,如果低8位非零,则低8位代表了此键的ASCII码。如果低8为为0,则高8位为键盘的扫描码。键盘上每个按键有唯一确定的扫描码,可以查相关资料确定。

如果cmd为2,则返回键盘状态。返回值中只看低8位。从最低位向高位看,如果为1,依次表示:右shift被按下、左shift被按下、Ctrl被按下、Alt被按下、scrol lock打开、num lock打开、caps lock打开、当前编辑方式为“插入”。
如果为0,则依次表示:右shift未按下、左shift未按下、Ctrl未按下、Alt未按下、scrol lock关闭、num lock关闭、caps lock关闭、当前编辑方式为“覆盖”。

看一下其它中断,是否有取按键时间的中断

用钩子函数

收藏!

sbickle真是个高手,佩服佩服