Windows编程之使用GetAsyncKeyState()函数为什么要( 0x8000)?
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)?相关推荐
- windows编程常用系统API函数
windows编程常用API的函数 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 6. API之菜单函数 7. AP ...
- [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE
在有些情况下需要得到函数调用者的模块名字.比如你想限制你的某个函数只能被自己某个特定的DLL调用. 或者比如在异常处理中你想了解是那个DLL/EXE抛出了异常. API函数_ReturnAddress ...
- [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE 原创陈本峰2009-02
在有些情况下需要得到函数调用者的模块名字.比如你想限制你的某个函数只能被自己某个特定的DLL调用. 或者比如在异常处理中你想了解是那个DLL/EXE抛出了异常. API函数_ReturnAddress ...
- 【Windows编程】windows窗口创建过程详解
文章目录 前言 1 应用程序的分类 2 应用程序分类的对比 3 编译工具 4 windows库文件和头文件 5 WinMain函数和MessageBox函数初始 6 窗口类 7 窗口类的分类 8 注册 ...
- 浅谈windows 编程中SendMessage函数的妙用!!!
windows编程中SendMessage函数是非常重要的,而且这个对于理解windows的消息机制也很重要.本文用代码的方式实现了一些功能,借以说明此函数之妙用.说明不当之处,希望批评指正,谢谢! ...
- 使用c++进行Windows编程中各种操作文件的方法 【转】
https://www.zhaokeli.com/article/8232.html 使用c++进行Windows编程中各种操作文件的方法 [转] 来源:赵克立博客 分类: C/C++ 标签:--发布 ...
- 【Windows编程】系列第三篇:文本字符输出
2019独角兽企业重金招聘Python工程师标准>>> 上一篇我们展示了如何使用Windows SDK创建基本控件,本篇来讨论如何输出文本字符. 在使用Win32编程时,我们常常要输 ...
- Windows编程一日一练(1)
首先,编程和旅游是我个人人生两大爱好,所以,每天空闲的时候我喜欢敲敲代码,或者看看别人写的程序,实在是很惬意.今天想看看window编程,争取坚持每日一练. windows程序主要是由微 ...
- Windows 编程
Delphi 利用Object Pascal 和可视控件库(VCL)对底层的Windows API 进行了完美的封装,所以很少需要使用基础Pascal 语言来建立Windows应用程序,也无需直接调用 ...
最新文章
- 省时省事省力 巧用阿里ECS D1构建大数据处理平台
- CSS3 Animation制作飘动的浮云和星星效果
- asp.net Linux 界面,在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法
- 手机画面尺寸多少满屏_各种大屏手机之中适合用户的最佳尺寸是多少?
- 图像融合评价指标:CC(Correlation Coefficient)以及余弦相关度、欧氏距离和皮尔逊相关度的通俗解释
- on_mouse OpenCV 获得矩形区域
- 苹果Mac上如何使用预览反转图片?
- 619. Biggest Single Number
- SwiftyJSON源码分析
- 新东方 计算机英语,常用计算机英语词汇:DRAM
- 智慧交通信号控制系统梗概
- 全国计算机等级考试怎么卸载,教你三种方法卸载Windows7SP1Beta
- HI,Bing,近期数字安全领域有什么热点事件?
- java trove_trove4j高性能Java集合库
- 微信支付一直显示服务器异常,商户支付异常告警服务
- uni-app 小程序 微信订阅消息通知
- ABAP 设置ALV复选框
- 【转】源nat和目的nat的区别
- hive一个字段包含另一个字段
- 硬盘卡住磁头的解决办法