当前位置:首页 » 编程语言 » c语言怎么同时读取同时按的按键
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言怎么同时读取同时按的按键

发布时间: 2022-09-23 07:50:53

① 求救c语言 如果要检测两个键同时被按下和松手检测的,要怎么样写呢

C语言 用getch() 可以即时获得按键的键值。
如果按下一个键,手不移动,根据你的键盘设置(按键时间长于多少则为新的按键),getch()会连续获得键值。
组合键将输出组合键的键值。
某些键,按一次会有2个键值,例如 F1,F2...F12, 上下左右箭头键。

Windows 和MFC c++ 程序 可以或的 各种复杂的按键“事件”,按着,抬起,按下抬起,你可以测时间间隔,时间延时,可以写很噜苏的程序。

#include<stdlib.h>
#include<stdio.h>
void main()
{
int i;
int key,key2;
// 普通键用 getch();取得
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
// 箭头键
if (key == 0xe0) {
key = getch();
printf("\nkey value = %02x -- %d\n",key,key);
};
// F1键
if (key == 0) {
key2 = getch();
printf("\nkey value = %02x\n",key2);
switch (key2) {
case 0x003b: printf("F1 key");break;
case 0x003c: printf("F2 key");break;
case 0x003d: printf("F3 key");break;
case 0x003e: printf("F4 key");break;
case 0x003f: printf("F5 key");break;
case 0x0040: printf("F6 key");break;
case 0x0041: printf("F7 key");break;
default: break;
};
};

}

② C语言如何实现判断2个键同时按下

如果是操作系统下,判断按键,需要调用相关操作系统的相关函数。

如果是单片机矩阵键盘,需要自己写循环延时判断按钮的电平状态。

我以window为例子,写了简单的判断W和A键同时按下的程序。

两个按键先后按下,之间存在间隔,我定义的常量,默认10毫秒,你需要自己改。

#include<stdio.h>
#include<windows.h>
#definedelayT10//两个按键先后按下的最大间隔,毫秒
intkeyDU(charkey);//判断按键是否按下,是返回1,否返回0
intmain()
{
intkw=0,kwl=0,ka=0,kal=0;

while(1)
{
kw=keyDU('W');
ka=keyDU('A');
if((kw==1&&kwl!=kw)||(ka==1&&kal!=ka))
{
while(delayT)//当其中一个键按下,每一毫秒检查一次两个键有没有同时按下
{
kw=keyDU('W');
ka=keyDU('A');
if(kw==0)
kwl=kw;
if(ka==0)
kal=ka;
if(kw==1&&kwl!=kw&&ka==1&&kal!=ka)
{
printf("W、A键同时被按下 ");
kwl=kw;
kal=ka;
break;
}
Sleep(1);
}
}

if(kw==0)
kwl=kw;
if(ka==0)
kal=ka;
}
return0;
}
intkeyDU(charkey)//判断按键是否按下,是返回1,否返回0
{
intdown=0;
down=GetKeyState(key);
if(down<0)
return1;
if(down>0)
return0;
return-1;
}

③ 求救c语言 如果要检测两个键同时被按下和松手检测的,要怎么样写呢

程序是顺序执行的,不存在严格的“同时”检测。所以,我们可以设置一个很“高”的检测频率。在同一个检测周期里发现按键都按下就可当做是同时按下。
然后你需要解决如何发现按键按下动作这个问题。
按键按下同样也不必一按下你就马上要发现这么紧张。同样在这么一个很“高”的检测频率下。发现前一次检测是个“没按下”状态现在变成了“按下”那就可以当做是这次检测周期里“按下”。
然后你需要解决如何记录前一次检测是什么东西的问题。
你需要额外用个寄存器暂时放你前一次检测的结果。并在检测周期结束之前记录当前的“日志”。
于是,你可以很从容地发现现在按键的状况以及上一次按键是个什么情况,你掌握了历史、当下、还要安排一下未来:检测到按键的动作后你要再写个服务程序来使用这个按键检测的结果。
最后,再说明一下,这个很“高”的频率大概10几ms也行的。越高频率检测越准确。同时。这个“同时”的检测也越严格。你可能会导致怎么按都很难触发‘同时’的动作。

④ C语言键盘内容读取

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

⑤ 如何设计2个按键同时按的键盘扫描C程序

1、读键程序:读P1。
内容对应+、-、TH/TL。
计次数识别TH/TL的长按和短按。
还需要考虑一个设定结束的考虑。
或者长时间无按键,视为设定完成。
2、显示程序:建议另一个定时中断中显示TH、TL的被设定值。
3、定时中断程序:通过IO指示灯翻转

⑥ c语言中怎样输入和读取方向键

在用C语言写出的“贪吃蛇”小游戏中,可以自编以下这个intokey( )函数,用来获取方向键值以便控制蛇的拐弯。库函数kbhit( )是检测是否有按键被按下,Dir是代表方向的变量,整型变量flag用来获取键值,1、2、3、4分别表示方向的上下左右。要#include<conio.h> .

void intokey( )

{ int flag;

if ( kbhit( ) ) //判断有键按下时才执行下面操作

{ flag = getch( ); //用flag来获取键值

if (flag==224) flag = getch( ); //值为224是方向键,要再次获取才行

if (flag==72 && dir != 2) dir = 1; //方向键为“上”且原方向不为下时,让dir=1.

if (flag==80 && dir != 1) dir = 2; //方向键为“下”且原方向不为上时,让dir=2.

if (flag==75 && dir != 4) dir = 3; //方向键为“左”且原方向不为右时,让dir=3.

if (flag==77 && dir != 3) dir = 4; //方向键为“右”且原方向不为左时,让dir=4.

}

}

注:上下左右键按下后都会产生2个值,第一个是224,第二个才分别是72、80、75和

77.所以要用库函数getch( )两次获取键值。如果是ASDW来控制拐弯,flag可以定义为

字符型,获取一次键值即可。

⑦ 如何在C语言中读取键盘输入的快捷键

命令行输入是不响应很多组合键的
所以要想读取快捷键,那么就要从系统层面读取
而不是用库函数
在Windows下可以用key hook
在linux下可以读取input event

⑧ 摁键盘中,同时按下两个键的c语言程序怎么写求一段程序

按键的同时检测
如果实在游戏里面
windows.h,stdio.h

if(GetAsyncKeyState('A')&0x8000)//'A'
c|=4;
if(GetAsyncKeyState('D')&0x8000)//'D'
c|=8;
if(c&4&&c&8)
{printf("hello");
c=0;
}
用了GetAsyncKeyStateapi的函数,这个函数的使用方法很有特点
用了get监测按键按下,然后c分别和4,8来或运算,然后if再用与运算监测,确实按下了那两个按键之后执行什么,当然在加&&,可以监测多个按键

⑨ 用C语言,同时接受多个按键,要怎么写代码,例如我做坦克大战,双人游戏时要控制坦克和发射子弹。

windows下是用消息队列来捕捉按键事件的,建议看下MFC,至于怎么控制坦克,用BFS和堆栈