丛林宝宝 发表于 2023-9-12 13:30:52

GetAsyncKeyState函数重要调用方法



先来看看GetAsyncKeyState()函数的原型:
SHORT GetAsyncKeyState(int virtual_key);它的返回值是SHORT类型,也就是short int,占2个字节,共16位,如果返回值的最高位是1则表示该键被按下,否则该键被松开。

若该键被松开,只需满足最高位为0,假如返回 0000 0000 0000 0000,

如果像这样:
if (GetAsyncKeyState(VK_A))直接将返回值进行逻辑判断,很显然逻辑为false,因为0000 0000 0000 0000后16位都是0,假如返回值是 0000 0000 0000 0001 呢?

直接拿来判断其逻辑值肯定为true,但实际上它表示false。

所以需要解决返回值后15位带来的影响。

怎么解决呢?很简单,用0x8000与其做 &(位与)操作就行了!

0x8000是16进制数,即 1000 0000 0000 0000。
0000 0000 0000 0001 & 1000 0000 0000 0000 = 0000 0000 0000 0000
0110 1100 1111 0001 & 1000 0000 0000 0000 = 0000 0000 0000 0000
1010 0011 0111 1100 & 1000 0000 0000 0000 = 1000 0000 0000 0000结果只与第1位有关。

所以要: if (GetAsyncKeyState(VK_A) & 0x8000)这样判断。



页: [1]
查看完整版本: GetAsyncKeyState函数重要调用方法