前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言通用键盘读取函数的定义

C语言通用键盘读取函数的定义

原创
作者头像
鲁郭大侠
修改2020-03-09 11:18:26
1.6K0
修改2020-03-09 11:18:26
举报
文章被收录于专栏:高级程序设计高级程序设计

TC在键盘内容读取功能上设置了多个函数,但就功能的完备性而言,它是不成功的。

它没有提供:

  • 单个输入内容的动态编辑
  • 输入字符的检测
  • 输入内容范围的限定
  • 多个输入内容的相互关联

因而,采用C编程,就要考虑到以上问题,并对此进行相应的改正,以适应编程需要。

在上一节中,我们讨论了屏幕内容的清除,其中,我们使用了一个函数GetKey,其代码如下:

/* 等待自键盘输入键,并返回一个键值 */

int GetKey(void)

{

int tKey;

tKey=getch();

return tKey;

}

在这个函数中,我们采用了TC输入函数getch为键盘输入函数,但是该函数只能读取键盘中的部分字符,而对于一些功能键、特殊键它不能进行正确的读取。

因而在TC程序的设计时,我们不能应用该函数来完成键盘字符的读取工作。从而有必要重新对该函数进行定义。

综观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)得到:

位7 0x80 Insert ON

6 0x40 Caps ON

5 0x20 Numlock ON

4 0x10 Scroll Lock ON

3 0x08 ALT

2 0x04 CTRL

1 0x02 <- SHIFT

0 0x01 -> SHIFT

为了方便起见,我们首先定义一些常用功能键的键值。

#define ReturnKey 0x0d

#define ESC 0x1b

#define Back 0x08

#define LeftArrow 0x4b00

#define RightArrow 0x4d00

#define UpArrow 0x4800

#define DownArrow 0x5000

#define PageUp 0x4900

#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 F10 0x4400

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函数。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档