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

问题描述 投票:0回答:2

按下按键与以下有什么区别:

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

我什么时候应该使用其中一种而不是另一种?

c++ input keyboard getchar
2个回答
27
投票

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

GetKeyState() 获取从线程的消息队列返回的按键状态。该状态不反映与硬件相关的中断级状态。

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

我在实践中看到的是,如果您按住一个键并在按下该键时分配一个行为,如果您使用 GetKeyState(),则该行为将比使用 GetAsyncKeyState() 被调用更多次.

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

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


5
投票

想想异步意味着什么。

  • GetAsyncKeyState()
    异步获取密钥状态,即无需等待任何操作,即 NOW

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

举个例子,假设已输入以下内容,但尚未阅读:

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

GetAsyncKeyState()
将会回归
ctrl pressed

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

然后

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

然后

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

GetKeyState()
随后将返回
ctrl pressed

© www.soinside.com 2019 - 2024. All rights reserved.