【问题标题】:How can I detect if any key is pressed by the user in C++ (console)?如何检测用户在 C++(控制台)中是否按下了任何键?
【发布时间】:2012-10-24 09:49:49
【问题描述】:

我正在编写一个 C++ CLI 应用程序,如何检测用户是否按下了任何键。我已经在 c# 中看到过,但是如何在 c++ 中实现它

while(1)
     {
      while(/* code to check if any key is pressed*/)
           {        //rest of the code
                    // sleep function
           }
     }

提示:就像在 CLI 游戏中,当按键被按下时移动或采取某些动作,或者如果没有输入则不做任何事情。

【问题讨论】:

  • 我发现我们也可以在c++中使用_khbit()函数。如果按下任何键,_khbit 等于 1。您必须清除 _khbit 缓冲区,否则它将保持为 1。清除方法是 character = getch();这会将最后输入的键保存在字符中,您可以比较并决定对哪个键执行哪个操作。

标签: c++ keyboard keypress keydown visual-c++-2010


【解决方案1】:

至少在 Windows 上你可以使用GetKeyState

【讨论】:

    【解决方案2】:

    我们可以在 C++ 中使用 _kbhit() 函数。如果按下任何键,_kbhit 等于 1。您必须清除 _kbhit 缓冲区,否则它将保持 1。清除方法是 character = getch();这会将最后输入的键保存在字符中,您可以比较并决定对哪个键执行哪个操作。

    【讨论】:

      【解决方案3】:

      虽然循环可能会消耗 CPU,但我不建议使用忙等待方法,而是应该考虑事件挂钩。

      在这里你可以阅读有关winapi按键事件挂钩C++ Win32 keyboard events

      如果您仍然有兴趣使用 while 循环,您还应该在检查条件为假后通过休眠来释放一些资源(例如 nanosleep )

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-18
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-22
        相关资源
        最近更新 更多