尝试不阻塞地读取键盘输入(Windows,C ++)

时间:2010-04-16 16:15:12

标签: c++ windows keyboard

我正在尝试编写一个Windows控制台应用程序(使用g ++编译的C ++),它将在循环中执行一系列指令,直到完成OR,直到按下ctrl-z(或其他一些按键)。我目前用来捕捉它的代码不起作用(否则我不会问,对吧?):

if(kbhit() && getc(stdin) == 26)
  //The code to execute when ctrl-z is pressed

如果我按一个键,它会被回显,应用程序会等待,直到我按Enter继续。值为26时,它不执行预期的代码。如果我使用类似于65的值来捕获值,那么如果我按A然后按Enter键将重新路由执行。

有没有办法被动地检查输入,如果它不是我正在寻找的东西,或者当它正是我正在寻找的时候正确地做出反应? ..然后不必按Enter键?

2 个答案:

答案 0 :(得分:3)

尝试ReadConsoleInput以避免熟化模式,并GetNumberOfConsoleInputEvents以避免阻止。

答案 1 :(得分:2)

如果G ++支持conio.h,那么你可以这样做:

#include <conio.h>
#include <stdio.h>

void main()
{
    for (;;)
    {
        if (kbhit())
        {
            char c = getch();
            if (c == 0) {
                c = getch(); // get extended code
            } else {
                if (c == 'a') // handle normal codes
                    break;
            }
        }
    }
}

This link may explain things a little more for you.