int bioskey(int cmd)
使用BIOS中断0x16执行各种键盘操作。参数cmd确定实际得操作。
bioskey的返回值由cmd决定:
0:低8位非0,返回在队列中等待的下一输入键的ascii字符或键盘的下一次按键输入的ascii字符。低8位为0,则高8位为扩展键盘码。
1:测试是否有可读的输入键,为0,则没有。Ctrl_break 返回0xffff(-1)。否则,返回下一个输入键。键值还保存,供下次cmd=0时bioskey调用返回。
2:请求当前换档键状态。状态值由下列值相或(or)得到:
位70x80 Insert ON
60x40 Caps ON
50x20 Numlock ON
40x10 Scroll Lock ON
30x08 ALT
20x04 CTRL
10x02 <- SHIFT
00x01 ->SHIFT
为了方便起见,我们首先定义一些常用功能键的键值。
#define ReturnKey 0x0d
#define ESC 0x1b
#define Back 0x08
#define LeftArrow 0x4b00
#define RightArrow0x4d00
#define UpArrow 0x4800
#define DownArrow 0x5000
#define PageUp0x4900
#define PageDown 0x5100
#define Home 0x4700
#define End 0x4f00
#define F1 0x3b00
#define F2 0x3c00
#define F3 0x3d00
#define F4 0x3e00
#define F5 0x3f00
#define F6 0x4000
#define F7 0x4100
#define F8 0x4200
#define F9 0x4300
#define F100x4400
int GetKey(void)
{
int tKey
while(bioskey(1)==0)
tKey=bioskey(0)
if ((tKey &0xff)!=0)
tKey=tKey &0xff
return tKey
}
以上代码,可基本完成常用程序键盘读取操作。
但我们必须注意到,对于函数GetKey的定义中,bioskey函数的使用,我们只是对cmd=0,1的情况进行了处理,而对于cmd=2,也即换档键状态没有进行处理,因而诸如ctrl-home等等GetKey不能进行相应的接收,如果确实需要,须继续扩充GetKey函数。
一般是使用getch获取
方向键(←): 0xe04b
方向键(↑): 0xe048
方向键(→): 0xe04d
方向键(↓): 0xe050
可以使用 _getch 函数
#include <stdio.h>
#include <conio.h>
void main()
{
char key, key2
bool needNextKey = false
while( ( key = _getch() ) != 27 ) //press ESC to break
{
if( needNextKey )
{
if( key2 == -32 )
{
if( key == 75 ) //left
{
printf_s( "<--\n" )
}
else if( key == 77 ) //right
{
printf_s( "-->\n" )
}
}
needNextKey = false
}
if( key <= 0 )
{
key2 = key
needNextKey = true
}
}
printf_s( "press any key to continue...\n" )
_getch()
}
命令行输入是不响应很多组合键的所以要想读取快捷键,那么就要从系统层面读取
而不是用库函数
在Windows下可以用key hook
在linux下可以读取input event