让bioskey()来捕获键盘按键消息.

作者在 2007-09-19 06:53:00 发布以下内容

大家在初学编程的时侯,有没有作过这样的尝试:用scanf()函数来获得方向键和一些控制键的ASCII的值.
比如:scanf("%c",&ch);运行的时时侯,不论怎么按那些方向键和控制键,都没有什么反应.这是什么原因.
大家可以想一下,%c是用来获取字符的输入,而这些方向键和控制键并不是ASCII的字符输入键.
哦,原来是这样.那么怎样才能捕获这些不是字符输入键呢.
首先,我们知道不能再用只捕获字符信息的方法来捕获这些键.那么,在C语言中有没有提供其它的捕获按键
信息的函数.当然,C语言提供了这样的函数.它就是bioskey().由于函数名的字面意思可知"基本输入输出系统键".
那么,bioskey()是怎么用的呢.它在bios.h中的原型声明:int _Cdecl bioskey(int cmd);
bioskey(1)检测是否有键(不检查单独控制键的按下(Shift/Ctrl/CapsLock/Alt/ScrLock/PrtScr/NumLock/PauseBreak))按下,
没有键按下时返回0,有键按下时返回按键码(任何按键码都不为0),
但此时并不将检测到的按键码从键盘缓冲队列中清除.
bioskey(0)返回键盘缓冲队列中的按键码,并将此按键码从键盘缓冲队列中清除.
bioskey(2)返回按键的状态,返回值保存在低8位中含义如下:
  
   位 为0时意义             为1时意义            
 
   7  插入状态              改写状态              
   6  大写状态              小写状态              
   5  数字状态,NumLock灯亮 光标状态,NumLock灯熄 
   4  ScrollLock灯亮        ScrollLock灯熄       
   3  Alt按下               Alt未按下             
   2  Ctrl按下              Ctrl未按下            
   1  左Shift按下           左Shift未按下         
   0  右Shift按下           右Shift未按下  

知道了以上的内容就很容易来捕获方向键的按键情况.如下面程序:
#include<stdio.h>
#include<conio.h>
#include<bios.h>
int main(void)
{
  int key;
  clrscr();
  while(!bioskey(1)) ;
  key=bioskey(0);
  printf("%x",key);
  getch();
}
运行一下可以知道:
向上的方向键(key=0x4800)
向下的方向键(key=0x5000)
向左的方向键(key=0x4b00)
向上的方向键(key=0x4d00)
那么,当我们要用bioskey()来输入字符键呢,该怎么办呢.
由于bioskey(0)返回值中,低字节为ASCII值,高字节为键描述码.
可以参考以下程序:
#include<stdio.h>
#include<conio.h>
#include<bios.h>
int main(void)
{
  char ch;
  clrscr();
  while(!bioskey(1)) ;
  ch=(char)bioskey(0);
  printf("%c",ch);
  getch();
}
希望大家都bioskey()有一个更深地认识.

我的C语言编程经验 | 阅读 6223 次
文章评论,共1条
neverTheSame(作者)
2008-04-21 13:51
1
boiskey(int cmd)的用法:
cmd: 0--返回键盘缓冲队列中的扫描码,并将此扫描码从键盘缓冲队列中清除.
     1--检测是否有键.
     2--返回按键的状态,返回值保存在低8位:
位   0
7 插入状态  改写状态               
6 大写状态  小写状态               
5 数字状态,NumLock灯亮 光标状态,NumLock灯熄  
4 ScrollLock灯亮 ScrollLock灯熄        
3 Alt按下   Alt未按下              
2 Ctrl按下  Ctrl未按下             
1 左Shift按下  左Shift未按下
0 右Shift按下  右Shift未按下
游客请输入验证码