首页
学习
活动
专区
圈层
工具
发布

WinAPI 极简教程:超简单的 Windows 接口入门

不同于 Python、Java 等语言的跨平台框架,WinAPI 是 Windows 专属的底层接口,主要基于 C/C++ 语言设计(也可通过其他语言间接调用),其设计思路深深契合 Windows 的消息驱动机制...GetAsyncKeyState() 函数 GetAsyncKeyState()是 Windows API 中用于检测键盘按键当前状态的函数,它能异步获取指定虚拟键的按下 / 释放状态,是实现实时键盘控制的关键函数...函数原型: SHORT GetAsyncKeyState(int vKey); 参数: vKey指定要检测的虚拟键码(如VK_SPACE空格键、VK_LEFT左箭头键) 具体虚拟按键由微软官方定义了一个表格...,可在此网页查看:Virtual-Key 代码 返回值: 最高位(位 15):如果为 1,表示按键当前处于按下状态 最低位(位 0):如果为 1,表示按键在上次调用后被按下过 返回 0 表示按键未被按下...如果我们要判断⼀个键是否被按过,可以检测GetAsyncKeyState返回值的最低值是否为1, 于是我们定义一个宏:#define KEY_PRESS(VK) ( (GetAsyncKeyState

11310

12.3 实现模拟鼠标录制回放

当有了当前鼠标坐标位置以后,接着就是需要获取到鼠标点击事件,鼠标点击可使用GetAsyncKeyState 获取指定虚拟键码对应的键盘键的状态,该函数原型如下所示; SHORT GetAsyncKeyState...如果当前的鼠标位置或按键状态与之前保存的值不同,表示鼠标动作发生了变化,将当前的位置和按键状态记录下来。...保存当前的鼠标位置和按键状态,用于下一次循环时比较是否发生了变化。...SetCursorPos(key_item[0], key_item[1]); Sleep(70); } } 最后是主函数部分,我们通过RegisterHotKey函数注册两个全局热键...GetMessage函数接收全局消息事件,当出现WM_HOTKEY消息则依次判断是否启用录制回放等功能,代码如下所示; int main(int argc, char* argv[]) { // 注册热键

74220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    12.3 实现模拟鼠标录制回放

    当有了当前鼠标坐标位置以后,接着就是需要获取到鼠标点击事件,鼠标点击可使用GetAsyncKeyState 获取指定虚拟键码对应的键盘键的状态,该函数原型如下所示; SHORT GetAsyncKeyState...如果当前的鼠标位置或按键状态与之前保存的值不同,表示鼠标动作发生了变化,将当前的位置和按键状态记录下来。...保存当前的鼠标位置和按键状态,用于下一次循环时比较是否发生了变化。...SetCursorPos(key_item[0], key_item[1]); Sleep(70); } } 最后是主函数部分,我们通过RegisterHotKey函数注册两个全局热键...GetMessage函数接收全局消息事件,当出现WM_HOTKEY消息则依次判断是否启用录制回放等功能,代码如下所示; int main(int argc, char* argv[]) { // 注册热键

    80020

    12.3 实现模拟鼠标录制回放

    当有了当前鼠标坐标位置以后,接着就是需要获取到鼠标点击事件,鼠标点击可使用GetAsyncKeyState 获取指定虚拟键码对应的键盘键的状态,该函数原型如下所示; SHORT GetAsyncKeyState...如果当前的鼠标位置或按键状态与之前保存的值不同,表示鼠标动作发生了变化,将当前的位置和按键状态记录下来。...保存当前的鼠标位置和按键状态,用于下一次循环时比较是否发生了变化。...SetCursorPos(key_item[0], key_item[1]); Sleep(70); } } 最后是主函数部分,我们通过RegisterHotKey函数注册两个全局热键...GetMessage函数接收全局消息事件,当出现WM_HOTKEY消息则依次判断是否启用录制回放等功能,代码如下所示; int main(int argc, char* argv[]) { // 注册热键

    90920

    C语言--贪吃蛇项目(1)

    我们可以直接进行使用,这个函数有两个参数,我们需要传进去的第一个参数就是我们的句柄信息,第二个参数就是我们自己定义的一个结构体变量的地址,这个结构体变量用来存放我们的光标的相关的信息; 设置成false就不会显示光标...GetAsyncKeyState 的返回值是short类型,在上⼀次调⽤ GetAsyncKeyState 函数后,如果 返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,...如果最⾼是0,说明按键的状态是抬起;如果最低位被置为1则说明,该按键被按过,否则为0。...,我们可以使用一个宏进行相关的定义; #define KEY_PRESS(VK) ( (GetAsyncKeyState(VK) & 0x1) ?...1 : 0 ) 这个里面的VK就是虚拟键代码,我们使用外面的函数GetAsyncKeyState进行判断这个键是否被按下,我们这里使用的是三目运算符,这个里面的KEY_PRESS就是一个我们自己定义的函数

    30810

    【C语言】实现贪吃蛇--项目实践(超详细)

    获取按键情况,GetAsyncKeyState的函数原型如下: SHORT GetAsyncKeyState( int vKey ); 将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态...GetAsyncKeyState 的返回值是short类型,在上⼀次调⽤ GetAsyncKeyState 函数后,如果 返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,如果最⾼是0,...说明按键的状态是抬 起;如果最低位被置为1则说明,该按键被按过,否则为0。...//检测按键状态,我们封装了⼀个宏 #define KEY_PRESS(VK) ((GetAsyncKeyState(VK)&0x1) ?...易错点:这⾥最容易错误的是,释放最后⼀个结点后,还得将指向在最后⼀个结点的指针改为NULL, 保证蛇尾打印可以正常结束,不会越界访问。

    1.8K10

    【C语言】c语言之基于链表实现贪吃蛇小游戏

    函数来获取按键情况,此函数函数原型如下: SHORT GetAsyncKeyState(int vKey); 将键盘上的键值传给函数,通过函数返回值来判断按键的状态。...GetAsyncKeyState 返回值是short类型,在上一次调用此函数后,如果返回的16位的short数据中,最高位是1,说明按键的状态是按下,如果最高位是0,说明按键的状态是抬起;如果最低位被置为...1,则说明该按键被按过,否则位0。   ...如果我们要判断按键是否被按过,只需要判断返回值最低值是否为1即可,我们可以按位与上0x1来获取最低位的值,那么我们就可这样来编写函数: #define KEY_PRESS(VK) ((GetAsyncKeyState...y = rand() % 25 + 1;//纵坐标1-25范围也不会越界 } while (x % 2 !

    44910

    C语言实现贪吃蛇【完整版】

    获取键盘的值的情况   完贪吃蛇我们一定需要用键盘来控制一些功能,我们可以使用 GetAsyncKeyState 函数来获取按键情况,此函数函数原型如下: SHORT GetAsyncKeyState(...GetAsyncKeyState 返回值是short类型,在上一次调用此函数后,如果返回的16位的short数据中,最高位是1,说明按键的状态是按下,如果最高位是0,说明按键的状态是抬起;如果最低位被置为...1,则说明该按键被按过,否则位0。   ...如果我们要判断按键是否被按过,只需要判断返回值最低值是否为1即可,我们可以按位与上0x1来获取最低位的值,那么我们就可这样来编写函数: #define KEY_PRESS(VK) ((GetAsyncKeyState...y = rand() % 25 + 1;//纵坐标1-25范围也不会越界 } while (x % 2 !

    61610

    【C语言数据结构】零基础打造控制台游戏:贪吃蛇实战教程----链表与Win32 API的完美结合!

    函数 获取按键情况,GetAsyncKeyState的函数原型如下: SHORT GetAsyncKeyState( int vKey ); 将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态...GetAsyncKeyState 的返回值是short类型,在上⼀次调⽤ GetAsyncKeyState 函数后,如果返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,如果最⾼是0,说明按键的状态是抬起...;如果最低位被置为1则说明,该按键被按过,否则为0。...如果我们要判断⼀个键是否被按过,可以检测GetAsyncKeyState返回值的最低值是否为1....当蛇头移动到食物位置时,它会吃掉食物,然后长度会变长,总分数增加,并在地图上立即重新生成一个新的食物。

    22310

    【实战项目】想自己通过C语言编写贪吃蛇吗?先来学习一下什么是WIN32API

    也就是说GetConsoleScreenBufferInfo这个函数是专门用来获取光标的位置信息的,因为咱们本次的贪吃蛇游戏编写中不会涉及这个函数,因此这里我就不继续展开了,以后有机会我们再来分享; 八...,以及上次调用 GetAsyncKeyState 后是否按下了该键。...可以简单的理解就是用来检测键盘的各个按键的使用情况。...首先我们要明确的是我们需要检测按键是否使用过,也就是我们只需要检测返回值的最低位是否为1,这样我们就可以借助按位与&操作符来完成,如:GetAsyncKeyState(VK) & 1; 其次我们需要明确这个表达式的结果...) (GetAsyncKeyState(VK) & 1?

    55610

    俄罗斯方块彩蛋(附星空表白彩蛋)

    ,还有一个显示下一个方块的区域,得到的分数可以用一个变量贮存,然后在窗口打印出来,那么此时要完成这些基本游戏逻辑我们需要选择一个好的图形工具,可以画方块,可以画游戏区域和下一个方块提示,我们这里选择由C+...//操作介绍框终点纵坐标 #define GameOperaY_2 610 也可以美观使用画图画一个一样的图 见文章 开发心得 2.游戏欢迎界面(这里比较简单 主要是利用了递归函数保持页面存在和按键接受...(VK_SPACE)) { break; } else if (GetAsyncKeyState(VK_ESCAPE)) //游戏介绍 { cleardevice();...("仿宋")); setcolor(RGB(20, 20, 120)); outtextxy(230, 460, "--按Tab返回主页面--"); while (1) //不按键窗口不消失...outtextxy(X + y * 30, Y + x * 30, "■"); } } } - 第三步难度:⭐⭐ 1.实现消行音效,2.游戏开始音效,3.游戏暂停同时停止音效(这里有个难点就是重新播放不会从

    59120

    基于C语言和Win32 API实现贪吃蛇

    六、Win32 API介绍 本次实现贪吃蛇会使用到的一些Win32 API知识,那么就学习一下 Win32 API是Windows操作系统提供的一套应用程序接口,它允许开发者使用C或C++等编程语言来创建各种...获取按键情况,GetAsyncKeyState的函数原型如下: SHORT GetAsyncKeyState(int vKey); 将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。...参考:虚拟键代码 GetAsyncKeyState 的返回值是short类型,在上一次调用 GetAsyncKeyState 函数后,如果返回的16位的short数据中,最高位是1,说明按键的状态是按下...,如果最高是0,说明按键的状态是抬起;如果最低位被置为1则说明,该按键被按过,否则为0。...如果游戏继续,就是检测按键情况,确定蛇下一步的方向,或者是否加速减速,是否暂停或者退出游戏。

    49710

    【C语言】【数据结构】项目实践——贪吃蛇游戏(超详细)

    这个函数就是获取按键情况,GetAsyncKeyState的函数原型如下: SHORT GetAsyncKeyState ( int vKey );...参考:GetAsyncKeyState 将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。...GetAsyncKeyState 的返回值是short类型,在上一次调用 GetAsyncKeyState 函数后,如果 返回的16位的short数据中,最高位是1,说明按键的状态是按下,如果最高是...0,说明按键的状态是抬起;如果最低位被置为1则说明,该按键被按过,否则为0。...易错点: 这里最容易错误的是,释放最后一个结点后,还得将指向在最后一个结点的指针改为NULL, 保证蛇尾打印可以正常结束,不会越界访问。

    1.1K10

    从0开始用C写贪吃蛇(基于链表)

    获取按键情况,GetAsyncKeyState的函数原型如下: 将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。...GetAsyncKeyState 的返回值是short类型,在上⼀次调⽤ GetAsyncKeyState 函数后,如果 返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,如果最...⾼是0,说明按键的状态是抬起;如果最低位被置为1则说明,该按键被按过,否则为0。...如果我们要判断⼀个键是否被按过,可以检测GetAsyncKeyState返回值的最低值是否为1....易错点: 这⾥最容易错误的是,释放最后⼀个结点后,还得将指向在最后⼀个结点的指针改为NULL,保证蛇尾打印可以正常结束,不会越界访问。

    27310
    领券