我想检测功能键,例如f1,使用c ++保存f2以在控制台中刷新,这样我就可以添加更多功能。
答案 0 :(得分:0)
检查此示例:
#include <conio.h>
using namespace std;
int main()
{
cout << "Press any key! CTRL-D to end" << endl;
while(1)
{
unsigned char x = _getch();
if (0 == x)
{
printf("Function key!\n");
x = _getch();
}
printf("key = %02x\n", x);
if (x == 4) break;
}
return 0;
}
当您按功能键时,您将获得零,然后是另一个代码。 使用该代码确定您获得的F键。
答案 1 :(得分:0)
如果您使用的是Windows控制台,则可以使用ReadConsoleInput()
来检测和处理键盘事件。
所有键都映射为虚拟键。 F功能键被映射为VK_F1
到VK_F12
。
以下是控制台键盘处理的实现。
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
void save();
void refresh();
int main(){
DWORD mode; /* Preserved console mode */
INPUT_RECORD event; /* Input event */
BOOL QUIT = FALSE; /* Program termination flag */
/* Get the console input handle */
HANDLE hstdin = GetStdHandle( STD_INPUT_HANDLE );
/* Preserve the original console mode */
GetConsoleMode( hstdin, &mode );
/* Set to no line-buffering, no echo, no special-key-processing */
SetConsoleMode( hstdin, 0 );
while (!QUIT){
if (WaitForSingleObject( hstdin, 0 ) == WAIT_OBJECT_0){ /* if kbhit */
DWORD count; /* ignored */
/* Get the input event */
ReadConsoleInput( hstdin, &event, 1, &count );
cout<<"Key Code = "<<event.Event.KeyEvent.wVirtualKeyCode <<" \n";
}
/* Only respond to key release events */
if ((event.EventType == KEY_EVENT)
&& !event.Event.KeyEvent.bKeyDown){
switch (event.Event.KeyEvent.wVirtualKeyCode){
case VK_ESCAPE:
QUIT = TRUE;
break;
case VK_F1:
save();
break;
case VK_F2:
refresh();
break;
case VK_F5:
break;
case VK_F8:
break;
}//switch
event.Event.KeyEvent.wVirtualKeyCode=-1;
}
}
return 0;
}
void save(){
}
void refresh(){
}
答案 2 :(得分:0)
F1-F12 使用 this solution 跨平台工作。
在 Windows 上,F11 在命令提示符下切换全屏模式,因此无法检测为按键。
答案 3 :(得分:0)
试试这个:
#include <iostream>
#include <system.h>
int main(){
while(true){
Sleep(10);
if(GetKeyState('R') & 0x8000){
std::cout << "R Pressed";
}
}
return 0;
}