GetAsyncKeyState
摘要:GetAsyncKeyState 是 Windows API 的一部分,用于确定在调用该函数时某个键是否处于按下或弹起状态,以及该键是否在上一次调用 GetAsyncKeyState 之后被按下。这个函数通常用于需要实时处理键盘输入的应用程序,比如游戏或交互式软件。
关键状态
- 键状态:键的状态可以是“弹起”(未按下)或“按下”(已按下)。GetAsyncKeyState 用于确定这个状态。
- 异步:GetAsyncKeyState 中的“异步”意味着该函数独立于程序的正常流程检查键状态。它不等待事件发生,只是在调用时检查当前状态。
- 虚拟键码:键盘上的每个键都由一个虚拟键码表示。例如,'A' 键的虚拟键码是 0x41。这个代码用于标识要检查的键的状态。
工作原理
- 函数签名:
SHORT GetAsyncKeyState(int vKey);
- 参数:vKey:要检查的键的虚拟键码。https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
- 返回值:SHORT
- 键盘按键信息:返回值代表两件事:
- 按键是否正在被按下(比如长按一个键)。
- 自从上次检查以来,按键是否被按下过。
- 理解位(Bit):
- 返回值是一个数字,可以用二进制(一串0和1)来理解它。
- 最高位(二进制中最左边的位)记录按键是否正在被按下。如果是1,说明按键正在被按下。
- 最低位(二进制中最右边的位)记录按键是否在上次检查后被按下过。如果是1,说明按键被按下过。
EXAMPLE:假设你在玩游戏,想检查“W”键是否被按下以向前移动。你调用 GetAsyncKeyState 来检查“W”键。如果返回值是 -32767(十进制),也就是 1000000000000001(二进制),这意味着:1.最高位是1,所以“W”键正在被按下。2.最低位是1,所以“W”键在上次检查后被按下过。
- 返回值为零的情况:
- 当前桌面不是活动桌面(比如你在不同的虚拟桌面上)。
- 检查按键状态的程序不是当前焦点程序,并且桌面设置不允许这种检查。
参考:https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getasynckeystate
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理