如何判断键盘上的某个键按下
同机房的 : luogu_yydfj
KEY_DOWN 函数是一个特别强有力的函数,它可以检测键盘及鼠标的状态(松开、点击),通常用于检查用户是否按了键盘上指定的键,也常用于做游戏,快捷键等等。
不过一开始必须有一个声明来启用KEY_DOWN函数。只有一个参数,keycode:KeyCode枚举类型或integer类型,指明要检测的按键或某个键的ASCII值返回值Boolean。
如果用户按了keycode参数指定的按键,函数返回TRUE,否则返回FALSE。
其实 KEY_DOWN 是一个自定义函数,他的原函数是如下
WINUSERAPI SHORT WINAPI GetAsyncKeyState(int vKey);
如何使用?
实际上,假如说我们判断 Enter 键是否按下,我们只需要知道它的keycode码就行了
#include<windows.h>
#include<cstdio>
int main()
{
while( ! ( GetAsyncKeyState( 13 ) & 0x8000 ) ) ;
printf("检测到您按下了 Enter 键,已退出程序!");
return 0;
}
我们为了方便使用,我们把它用 define 改成如下:
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
#include<windows.h>
#include<cstdio>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
int main()
{
while( ! KEY_DOWN( 13 ) ) ;
printf("检测到您按下了 Enter 键,已退出程序!");
return 0;
}
有了 KEY_DOWN 这个函数,我们是不是发现黑科技又多了一分呢?
不仅仅是 KEY_DOWN 可以判断键盘按下,__getch() 函数也可以判断键盘按下,用法如下:
#include<conio.h>
#include<cstdio>
int main()
{
while(getch() == 10);
printf("检测到您按下了 Enter 键,已退出程序!");
return 0;
}
注意:getch 码与 KEY_DOWN 码有少许不同,更多内容可以转此链接
最后附上 KEY_DOWN 码
按键 | 对应十进制数 |
---|---|
BackSpace BackSpace | 8 |
Tab Tab | 9 |
Clear | 12 |
Enter | 13 |
Shift | 16 |
Control (Ctrl) | 17 |
Alt | 18 |
Pause | 19 |
Caps_Lock | 20 |
Escape Escape | 27 |
space | 32 |
Prior | 33 |
Next | 34 |
End | 35 |
Home | 36 |
Left | 37 |
Up | 38 |
Right | 39 |
Down | 40 |
Select | 41 |
42 | |
Execute | 43 |
Insert | 45 |
Delete | 46 |
Help | 47 |
0 | 48 |
1 | 49 |
2 | 50 |
3 | 51 |
4 | 52 |
5 | 53 |
6 | 54 |
7 | 55 |
8 | 56 |
9 | 57 |
a A | 65 |
b B | 66 |
c C | 67 |
d D | 68 |
e E | 69 |
f F | 70 |
g G | 71 |
h H | 72 |
i I | 73 |
j J | 74 |
k K | 75 |
l L | 76 |
m M | 77 |
n N | 78 |
o O | 79 |
p P | 80 |
q Q | 81 |
r R | 82 |
s S | 83 |
t T | 84 |
u U | 85 |
v V | 86 |
w W | 87 |
x X | 88 |
y Y | 89 |
z Z | 90 |
f1 | 112 |
f2 | 113 |
f3 | 114 |
f4 | 115 |
f5 | 116 |
f6 | 117 |
f7 | 118 |
f8 | 119 |
f9 | 120 |
f10 | 121 |
f11 | 122 |
f12 | 123 |
f13 | 124 |
f14 | 125 |
f15 | 126 |
f16 | 127 |
f17 | 128 |
f18 | 129 |
f19 | 130 |
f20 | 131 |
f21 | 132 |
f22 | 133 |
f23 | 134 |
f24 | 135 |
鼠标左键 | VK_LBUTTON |
鼠标右键 | VK_RBUTTON |
如果这里未能找到你想要的 keycode 码,你可以使用下面这个代码试试点击按键
#include<cstdio>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? (1) : (0))
int main()
{
while(1)
for(int i = 1;i <= 300;i ++)
if( KEY_DOWN(i) )
printf("%d\n",i);
}