c语言监控键盘
1. c语言 如何在一段时间内检测键盘是否按下
#include <bios.h>
#include <stdio.h>
main()
{
int key;
for(;;)
{
if (bioskey(1)) /*有键按下,读取键值*/
key=bioskey(0);
else /*无键按下,返回0*/
key=0;
switch(key)
{case 0: ...../*无按键,执行该操作*/
case 0xXXXXH:..../*不同键值,做不同处理*/
。。。。。
}
}
}
该程序段功能:
判断是否有键按下,若有进行不同操作,若无进行其他操作。
相关原理:
函数名: bioskey
功 能: 直接使用BIOS服务的键盘接口
函数原型:int bioskey (int cmd)
说明:bioskey()的函数原型在bios.h中
bioskey()完成直接键盘操作,cmd的值决定执行什么操作。
cmd = 1:
当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0。
键盘有按键时,会把键值(扫描码)存入缓冲区,当需要判断是否有键按下时,扫描缓冲区,为空则无键按下,不为空则有键按下。注意:该功能并不清空缓冲区。
cmd = 0:
当cmd是0,bioskey()返回键盘键入的值。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码,高8位存放该键的扫描码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。
其操作步骤为:
1.检测缓冲区是否有数据;
2.没有则继续第一步;
3.读取缓冲区第一个单元中的键盘输入
4.读取的扫描码
5.将已读取的键盘输入从缓冲区删除
2. C语言如何检测键盘动作不要用bios.h和windows.h。
在应用层实现应该用到windows.h;而在核心层可以不必用到bios.h和windows.h.单说记录键盘动作在核心层实现的方法也是有许多种,讲都讲不完.你可以搜索:键盘驱动
3. 如何在linux下用c语言实现对键盘的监听
自己写函数
#include<stdio.h>
#include<termios.h>
staticstructtermiosinitial_settings,new_settings;
staticintpeek_character=-1;
voidinit_keyboard(void);
voidclose_keyboard(void);
intkbhit(void);
intreadch(void);
voidinit_keyboard()
{
tcgetattr(0,&initial_settings);
new_settings=initial_settings;
new_settings.c_lflag|=ICANON;
new_settings.c_lflag|=ECHO;
new_settings.c_lflag|=ISIG;
new_settings.c_cc[VMIN]=1;
new_settings.c_cc[VTIME]=0;
tcsetattr(0,TCSANOW,&new_settings);
}
voidclose_keyboard()
{
tcsetattr(0,TCSANOW,&initial_settings);
}
intkbhit()
{
unsignedcharch;
intnread;
if(peek_character!=-1)return1;
new_settings.c_cc[VMIN]=0;
tcsetattr(0,TCSANOW,&new_settings);
nread=read(0,&ch,1);
new_settings.c_cc[VMIN]=1;
tcsetattr(0,TCSANOW,&new_settings);
if(nread==1)
{
peek_character=ch;
return1;
}
return0;
}
intreadch()
{
charch;
if(peek_character!=-1)
{
ch=peek_character;
peek_character=-1;
returnch;
}
read(0,&ch,1);
returnch;
}
intmain()
{
init_keyboard();
while(1)
{
kbhit();
printf(" %d ",readch());
}
close_keyboard();
return0;
}