Windows编程之使用GetAsyncKeyState()函数为什么要(& 0x8000)?

先来看看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)

Windows编程之使用GetAsyncKeyState()函数为什么要( 0x8000)?相关推荐

  1. windows编程常用系统API函数

    windows编程常用API的函数 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 6. API之菜单函数 7. AP ...

  2. [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE

    在有些情况下需要得到函数调用者的模块名字.比如你想限制你的某个函数只能被自己某个特定的DLL调用. 或者比如在异常处理中你想了解是那个DLL/EXE抛出了异常. API函数_ReturnAddress ...

  3. [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE 原创陈本峰2009-02

    在有些情况下需要得到函数调用者的模块名字.比如你想限制你的某个函数只能被自己某个特定的DLL调用. 或者比如在异常处理中你想了解是那个DLL/EXE抛出了异常. API函数_ReturnAddress ...

  4. 【Windows编程】windows窗口创建过程详解

    文章目录 前言 1 应用程序的分类 2 应用程序分类的对比 3 编译工具 4 windows库文件和头文件 5 WinMain函数和MessageBox函数初始 6 窗口类 7 窗口类的分类 8 注册 ...

  5. 浅谈windows 编程中SendMessage函数的妙用!!!

    windows编程中SendMessage函数是非常重要的,而且这个对于理解windows的消息机制也很重要.本文用代码的方式实现了一些功能,借以说明此函数之妙用.说明不当之处,希望批评指正,谢谢! ...

  6. 使用c++进行Windows编程中各种操作文件的方法 【转】

    https://www.zhaokeli.com/article/8232.html 使用c++进行Windows编程中各种操作文件的方法 [转] 来源:赵克立博客 分类: C/C++ 标签:--发布 ...

  7. 【Windows编程】系列第三篇:文本字符输出

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇我们展示了如何使用Windows SDK创建基本控件,本篇来讨论如何输出文本字符. 在使用Win32编程时,我们常常要输 ...

  8. Windows编程一日一练(1)

    首先,编程和旅游是我个人人生两大爱好,所以,每天空闲的时候我喜欢敲敲代码,或者看看别人写的程序,实在是很惬意.今天想看看window编程,争取坚持每日一练.        windows程序主要是由微 ...

  9. Windows 编程

    Delphi 利用Object Pascal 和可视控件库(VCL)对底层的Windows API 进行了完美的封装,所以很少需要使用基础Pascal 语言来建立Windows应用程序,也无需直接调用 ...

最新文章

  1. 省时省事省力 巧用阿里ECS D1构建大数据处理平台
  2. CSS3 Animation制作飘动的浮云和星星效果
  3. asp.net Linux 界面,在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法
  4. 手机画面尺寸多少满屏_各种大屏手机之中适合用户的最佳尺寸是多少?
  5. 图像融合评价指标:CC(Correlation Coefficient)以及余弦相关度、欧氏距离和皮尔逊相关度的通俗解释
  6. on_mouse OpenCV 获得矩形区域
  7. 苹果Mac上如何使用预览反转图片?
  8. 619. Biggest Single Number
  9. SwiftyJSON源码分析
  10. 新东方 计算机英语,常用计算机英语词汇:DRAM
  11. 智慧交通信号控制系统梗概
  12. 全国计算机等级考试怎么卸载,教你三种方法卸载Windows7SP1Beta
  13. HI,Bing,近期数字安全领域有什么热点事件?
  14. java trove_trove4j高性能Java集合库
  15. 微信支付一直显示服务器异常,商户支付异常告警服务
  16. uni-app 小程序 微信订阅消息通知
  17. ABAP 设置ALV复选框
  18. 【转】源nat和目的nat的区别
  19. hive一个字段包含另一个字段
  20. 硬盘卡住磁头的解决办法

热门文章

  1. 如何监控移动广告渠道效果和实施反作弊策略?
  2. HTML5--多媒体viedo和radio
  3. mtk平台usb序列号与手机序列号
  4. Android安卓图片切换(PictureSelector)
  5. 树莓派控制固态继电器的使用
  6. 三相固态继电器的使用问题
  7. 如何快速下载github的release
  8. IOIO OTG开发板
  9. docker + openface进行人脸识别(初探)
  10. 【笔记】使用Opencv中均值漂移meanShift跟踪移动目标