在c ++控制台中检测功能键。

时间:2015-07-12 12:10:35

标签: c++ function key

我想检测功能键,例如f1,使用c ++保存f2以在控制台中刷新,这样我就可以添加更多功能。

4 个答案:

答案 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_F1VK_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(){

}

更多关键映射:https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

答案 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;
}