C语言键盘内容读取

Python019

C语言键盘内容读取,第1张

综观TC提供的键盘输入函数,以bioskey函数为最合适选择。

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