使用以下方式获得按键之间的区别是什么:
GetKeyState()
GetAsyncKeyState()
getch()
?我应该何时使用另一个?
答案 0 :(得分:18)
GetKeyState()和GetAsyncKeyState()是Windows特定的API,而getch()适用于其他非Windows特定的C编译器。
GetKeyState()获取从线程的消息队列中返回的密钥状态。状态不反映与硬件关联的中断级别状态。
GetAsyncKeyState()指定自上次调用GetAsyncKeyState()以来是否按下键,以及该键当前是启用还是关闭。如果设置了最高有效位,则键为关闭,如果设置了最低有效位,则在上次调用GetAsyncKeyState()之后按下该键。
我在实践中看到的是,如果按住某个键并在按下该键时指定一个行为,如果使用GetKeyState(),则会比使用GetAsyncKeyState调用更多次行为()。
在游戏中,我更喜欢使用GetAsyncKeyState()。
(您还可以查看MSDN博客上的更多详细信息。)
答案 1 :(得分:0)
考虑 async 的含义。
GetAsyncKeyState()
异步地获取密钥状态,即不等待任何东西,即 NOW 。
GetKeyState()
会同步获取键状态,这是您将要使用getch()
读取的键的键状态。它与按键本身一起排队在键盘缓冲区中。
例如,假设输入了以下内容,但尚未阅读:
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