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
  • 键盘按键信息:返回值代表两件事:
    1. 按键是否正在被按下(比如长按一个键)。
    2. 自从上次检查以来,按键是否被按下过。
  • 理解位(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

posted @   回火的西瓜冰  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示