来自windows.h的GetAsyncKeyState
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自windows.h的GetAsyncKeyState相关的知识,希望对你有一定的参考价值。
我将使用以下代码来解释我的问题:
#include <Windows.h>
#include <iostream>
int main()
{
bool toggle = 0;
while (1)
{
if (GetAsyncKeyState('C') & 0x8000)
{
toggle = !toggle;
if (toggle) std::cout << "Pressed
";
else std::cout << "Not pressed
";
}
}
}
测试,我看到了
(GetAsyncKeyState('C') & 0x8000) // 0x8000 to see if the most significant bit is 1
具有相同的行为
(GetAsyncKeyState('C'))
但是,要实现我想要的行为,这是任何文本输入的工作方式(它等待1秒,如果你仍然按下按钮,它开始以一定的速率发送垃圾邮件),我需要写
(GetAsyncKeyState('C') & 1)
返回值的最低有效位的行为严格保留,以便与16位Windows应用程序(非抢占式)兼容,不应依赖它。
有人可以澄清一下吗?
MSDN告诉您为什么在您链接的同一页面上!
虽然返回值的最低有效位表示自上次查询以来是否按下了键,但由于Windows的先发制人多任务特性,另一个应用程序可以调用GetAsyncKeyState并接收“最近按下”位而不是您的应用程序。返回值的最低有效位的行为严格保留,以便与16位Windows应用程序(非抢占式)兼容,不应依赖它。
GetAsyncKeyState
为您提供“与硬件相关的中断级别状态”,并且可能由窗口站/会话中的所有进程共享。
低位可能连接到您可以在控制面板中设置的键盘键重复延迟,但它并不重要,因为MSDN告诉您不要查看该位。
GetAsyncKeyState
通常不是处理键盘输入的正确方法。控制台应用程序应该读取stdin,或使用控制台API。 GUI应用程序应使用WM_CHAR
/ WM_KEYDOWN
/ WM_KEYUP
窗口消息。
以上是关于来自windows.h的GetAsyncKeyState的主要内容,如果未能解决你的问题,请参考以下文章
安装了visual c 2008,自动生成一个项目,居然也过不了,fatal error C1083: 无法打开包括文件:“windows.h