- 注册时间
 - 2021-4-16
 
- 最后登录
 - 2024-11-26
 
- 在线时间
 - 4 小时
 
 
 
 
 
编程入门 
  
	- 龙马币
 - 154 
 
 
 
 
 | 
 
 
 
先来看看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)  这样判断。 
 
 
 
 |   
 
 
 
 |