【问题标题】:What is GetAsyncKeyState's return value?GetAsyncKeyState 返回值是什么?
【发布时间】:2019-04-14 10:21:36
【问题描述】:

我尝试在我正在进行的项目中使用GetAsyncKeyState。唯一的问题是我不知道它返回什么值,以及如何检查它。根据MSNdocumentation

类型:短

如果函数成功,则返回值指定自上次调用 GetAsyncKeyState 后是否按下了键,以及该键当前是向上还是向下。如果设置了最高有效位,则按键按下,如果设置了最低有效位,则在上一次调用 GetAsyncKeyState 后按键被按下。但是,您不应该依赖最后一种行为;有关详细信息,请参阅备注。

我知道SHORT 类型是一个数字,但我在 StackOverflow 和互联网上看到了很多不同的答案,但是当 GetAsyncKeyState 评估为真时,它的返回值是什么,它返回 0 还是 0x8001?

【问题讨论】:

  • 它返回一组标志,编码为单个 16 位值。该文档解释了各个标志是什么以及它们的存储位置。您遇到的具体问题是什么?
  • 测试最后一位是否设置的规范方法是测试<0
  • @IInspectable 问题是按下键时返回什么值?它会返回该键的十六进制值还是其他数字?我已经相应地编辑了我的问题。
  • @DavidHeffernan 如果设置了最后一位,它将是一个吗?
  • 你问错问题了。当按下相应的键时,它会返回不同的值,但它总是会返回值,其中设置了最高有效位。

标签: ruby winapi


【解决方案1】:

返回值可以是 4 个可能的值之一:

  • 0x0000
  • 0x0001
  • 0x8000
  • 0x8001

使用& 0x8000(或者< 0,因为SHORT 是有符号类型)检查是否“设置了最高有效位”(这使得有符号类型为负)。

使用& 0x0001 检查是否“设置了最低有效位”。

【讨论】:

  • 小于零检查仅适用于1 一种编程语言支持特定大小的整数值,2 所有位都用于表示这些类型中的值, 3 编程语言使用二进制补码来表示有符号值。 Ruby 似乎不是一种支持上述所有内容的编程语言。
猜你喜欢
  • 2011-12-15
  • 2020-05-14
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 2013-04-09
  • 2014-05-16
相关资源
最近更新 更多