GetAsyncKeyState的返回值是什么?

3

我正在尝试在一个项目中使用GetAsyncKeyState。唯一的问题是我不知道它返回什么数值,也不知道如何检查它。 根据MSN 文档

类型:SHORT

如果函数成功,则返回值指定自上次调用 GetAsyncKeyState 以来是否按下按键,以及按键当前是弹起还是按下。 如果最高位设置,则按键处于按下状态,如果最低位设置,则在上一次调用 GetAsyncKeyState 之后按下了按键。 但是,您不应该依赖这种行为; 有关更多信息,请参见“备注”。

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


1
它返回一组标志,编码为单个16位值。文档解释了各个标志的含义以及它们存储的位置。您具体遇到了什么问题? - IInspectable
测试最后一位是否设置的规范方法是测试<0 - David Heffernan
@IInspectable 问题是按下键时返回什么值?它返回该键的十六进制值还是另一个数字?我已相应地编辑了我的问题。 - Practical1
@DavidHeffernan 如果最后一位被设置了,它会是1吗? - Practical1
你问错了问题。当按下相应的键时,它会返回不同的值,但它总是会返回最高有效位被设置的值。 - IInspectable
@实际上,我不理解那个问题。一个位可以是0或1。当设置了位时,该位的值为1。当设置了最后一位时,数字必须为负数。所有负数都有最后一位设置。因此我的评论。 - David Heffernan
1个回答

6
返回结果如下:

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

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

使用 & 0x8000(或者使用 < 0,因为 SHORT 是有符号类型),来判断“最高位是否被设置”(这会使得有符号类型变成负数)。

使用 & 0x0001 来判断“最低位是否被设置”。


小于零的检查仅适用于以下情况:1.编程语言提供对特定大小的整数值的支持,2.所有位用于表示这些类型中的值,3.编程语言使用二进制补码来表示有符号值。Ruby似乎不是一种提供所有上述支持的编程语言。 - IInspectable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接