下面是我用Turob C++3.0 写的一个检测 bioskey(int cmd) 函数返回的各键盘按键的键值的程序,一般的键值都是三位或四位十六进制数,就是有个问题:说不准按下哪些组合键,就会出现两位的键值,而且重新按下的话却又得不到这些值了,不知为什么。
#include<bios.h>
#include<iostream.h>
#include<conio.h>
//十进制转十六进制
void turnox(unsigned int x)
{
unsigned int y;
if(x>=16)
{
y=x%16;
x=x/16;
turnox(x);
}
else y=x;
switch(y)
{
case 15 :
{
cout<<"f";
break;
}
case 14 :
{
cout<<"e";
break;
}
case 13 :
{
cout<<"d";
break;
}
case 12 :
{
cout<<"c";
break;
}
case 11 :
{
cout<<"b";
break;
}
case 10 :
{
cout<<"a";
break;
}
default : cout<<y;
}
}
void main()
{
unsigned int key;
clrscr();
cout<<"Test the fuction bioskey(int cmd)\n"<<endl;
while(1)
{
//结束条件
cout<<"Press q to exit.\n"<<endl;
if(getch()==q)
break;
while(bioskey(1)==0);
key=bioskey(0);
//键值输出
cout<<"\nYou have inputed a key marked\t\"";
turnox(key);
cout<<"/"<<key<<"\".";
}
}
int bioskey(int cmd)本函数用来执行各种键盘操作,由cmd确定操作。
cmd可为以下值:
0 返回敲键盘上的下一个键。若低8位为非0,即为ASCII字符;若低8位为0,
则返回扩充了的键盘代码。
1 测试键盘是否可用于读。返回0表示没有键可用;否则返回下一次敲键之值。
敲键本身一直保持由下次调用具的cmd值为0的bioskey所返回的值。
2 返回当前的键盘状态,由返回整数的每一个位表示,见下表:
┌──┬───────────┬───────────┐
│ 位 │为0时意义 │为1时意义 │
├──┼───────────┼───────────┤
│ 7 │插入状态 │改写状态 │
│ 6 │大写状态 │小写状态 │
│ 5 │数字状态,NumLock灯亮 │光标状态,NumLock灯熄│
│ 4 │ScrollLock灯亮 │ScrollLock灯熄 │
│ 3 │Alt按下 │Alt未按下 │
│ 2 │Ctrl按下 │Ctrl未按下 │
│ 1 │左Shift按下 │左Shift未按下 │
│ 0 │右Shift按下 │右Shift未按下 │
└──┴───────────┴───────────┘