GetKeyState()与GetAsyncKeyState()与getch()?

时间:2013-07-21 09:10:48

标签: c++ input keyboard getchar

使用以下方式获得按键之间的区别是什么:

  • GetKeyState()
  • GetAsyncKeyState()
  • getch()

我应该何时使用另一个?

2 个答案:

答案 0 :(得分:18)

GetKeyState()和GetAsyncKeyState()是Windows特定的API,而getch()适用于其他非Windows特定的C编译器。

GetKeyState()获取从线程的消息队列中返回的密钥状态。状态不反映与硬件关联的中断级别状态。

GetAsyncKeyState()指定自上次调用GetAsyncKeyState()以来是否按下键,以及该键当前是启用还是关闭。如果设置了最高有效位,则键为关闭,如果设置了最低有效位,则在上次调用GetAsyncKeyState()之后按下该键。

我在实践中看到的是,如果按住某个键并在按下该键时指定一个行为,如果使用GetKeyState(),则会比使用GetAsyncKeyState调用更多次行为()。

在游戏中,我更喜欢使用GetAsyncKeyState()。

(您还可以查看MSDN博客上的更多详细信息。)

答案 1 :(得分:0)

考虑 async 的含义。

  • GetAsyncKeyState()异步地获取密钥状态,即不等待任何东西,即 NOW

  • GetKeyState()同步获取键状态,这是您将要使用getch()读取的键的键状态。它与按键本身一起排队在键盘缓冲区中。

例如,假设输入了以下内容,但尚未阅读:

  • h
  • i
  • shift + 1
  • ctrl (按住)

GetAsyncKeyState()将返回ctrl pressed

GetKeyState() will return H按下until you call getch()`

GetKeyState()将返回I pressed,直到您致电getch()

然后

GetKeyState()将返回shift pressed, 1 pressed,直到您调用getch(),然后将返回!(按 shift + 1的结果

GetKeyState()然后将返回ctrl pressed