有关在DOS下编程响应键盘的问题,困扰多日,达人请进

xtfj 2005-06-07 10:07:57
我现在用TC(或BC)在DOS下编程,要求分别响应键盘的按下与弹起事件。
比如按下A键则在屏幕上不断输出A,弹起A键则输出一个B,无键盘按下或弹起事件则什么也不做。
也就是输出这样:AAAAAAAAAAAAAAAAAAAAAAAAAAB
我用的bioskey函数做的
非常郁闷的是在第一个A和第二个A之间有一段时间间隔,结果输出变成了:ABBBAAAAAAAAAAAAAAAAB
也就是bioskey在第一个A和第二个A之间间隔的这段时间里不响应键盘认为无键盘响应,对不?
请高手指点,不知我这个应该怎么做?(编程实现,不要告诉我去改主板BIOS里的键盘间隔时间哦)
谢谢!谢谢!


...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtfj 2005-06-07
  • 打赏
  • 举报
回复
下面是一段完整测试代码,我试过bioskey或者用kbhit函数,均不行。
我刚才还说错了一点,并非第一和第二个字母输出有间隔,把程序中的delay去掉就会发现其实键盘输出一直就有间隔,只是第一和第二个的间隔长一些罢了,罢delay设置成200或300就能连续输出了,但问题是这样实时性就太差了。我要求是键盘一弹起就输出B,如果delay个几百毫秒就没意义了:(
#include "stdio.h"
#include "dos.h"
#include "bios.h"
#include <conio.h>
#define ESC 0x1

unsigned char GetKeyCode(void)
{
union REGS regs;
regs.h.ah=0x0;
int86(0x16,®s,®s);
return regs.h.ah;
}


void main(void)
{
char ch;
int key;
while(1)
{
delay(50);
/* if(kbhit())
{
ch = GetKeyCode();
printf("getkeycode: %c\n", ch);
if(ch == 'a')
break;
}
else
printf("UP\n");
*/
if(bioskey(1))
{
key = bioskey(0) >> 8;
printf("KeyCode: %xd\n", key);
if(key == ESC)
break;
}
else
printf("UP\n");

}
}
cqjjhsj 2005-06-07
  • 打赏
  • 举报
回复
能把你的程序贴主要的出来吗?
「已注销」 2005-06-07
  • 打赏
  • 举报
回复
不知怎么实现。。。up。。。等高人。。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧