快速入门基础控制台API

目录

一、什么是win32API

二、API基础函数介绍

2.1控制台基础命令

2.1.1标题修改

2.1.2长宽修改

2.1.3坐标

2.2GetStdHandle

2.3GetConsoleCursorInfo

2.4SetConsoleCursorInfo

2.5SetConsoleCursorPosition

2.6GetAsyncKeyState

三、API函数综合应用

3.1设置光标

3.2判断一个键是否被按下

3.2基于控制台的游戏-贪吃蛇


详见Microsoft官方解释:控制台函数 - Windows Console | Microsoft Learn

一、什么是win32API

        Win32 API是一组用于开发Microsoft Windows操作系统上应用程序的应用程序接口(API)。这些API是基于32位版本的Windows操作系统(如Windows 95、Windows 98、Windows NT等)的,因此得名Win32。它提供了对操作系统的底层功能的访问,包括窗口管理、图形设备接口、输入输出、文件系统等。通过Win32 API,开发人员可以编写能够与操作系统交互并利用其功能的应用程序,从简单的窗口应用程序到复杂的系统工具和游戏等各种类型的应用都可以使用Win32 API来开发。

二、API基础函数介绍

2.1控制台基础命令

2.1.1标题修改

title 自定义标题

2.1.2长宽修改

mode con cols=100 lines=30

2.1.3坐标

COORD 是Windows API中定义的⼀个结构体,表示⼀个字符在控制台屏幕幕缓冲区上的坐标,坐标系的原点位于缓冲区的顶部左侧单元格。

typedef struct _COORD {
    SHORT X;
    SHORT Y;
} COORD, *PCOORD;

2.2GetStdHandle

HANDLE GetStdHandle(DWORD nStdHandle);
  1. 作用:GetStdHandle是⼀个Windows API函数。它⽤于从⼀个特定的标准设备(标准输⼊、标准输出或标准错误)中取得⼀个句柄(⽤来标识不同设备的数值),使⽤这个句柄可以操作设备。
  2. 参数:

2.3GetConsoleCursorInfo

BOOL WINAPI GetConsoleCursorInfo(
    HANDLE hConsoleOutput,
    PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
);
  1. 作用:检索有关指定控制台屏幕缓冲区的光标大小和可⻅性的信息
  2. 参数:
    a.操作的句柄
    b.PCONSOLE_CURSOR_INFO 是指向 CONSOLE_CURSOR_INFO 结构的指针,该结构体接收有关主机光标的信息。
    typedef struct _CONSOLE_CURSOR_INFO {
      DWORD dwSize;
      BOOL  bVisible;
    } CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
    
    • dwSize:由光标填充的字符单元格的百分⽐。 此值介于1到100之间。 
              光标外观会变化,范围从完全填充单元格到单元底部的⽔平线条。
    • bVisible:游标的可⻅性。 如果光标可⻅,则此成员为 TRUE。

2.4SetConsoleCursorInfo

BOOL WINAPI SetConsoleCursorInfo(
    HANDLE hConsoleOutput,
    const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
);
  1. 作用:设置指定控制台屏幕缓冲区的光标的大小和可见性。
  2. 参数:同2.3解释

2.5SetConsoleCursorPosition

BOOL WINAPI SetConsoleCursorPosition(
    HANDLE hConsoleOutput,
    COORD pos
);
  1. 作用:
  2. 参数:
    a. 句柄
    b. 指向坐标的结构体

2.6GetAsyncKeyState

SHORT GetAsyncKeyState(
    int vKey
);
  1. 作用:将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。
  2. 返回值:如果返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,如果最⾼是0,说明按键的状态是抬起;如果最低位被置为1则说明该按键被按过,否则为0。
  3. 参数详见:虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn

三、API函数综合应用

3.1设置光标

void SetPos(short x, short y)
{
    COORD pos = { x, y };
    HANDLE hOutput = NULL;
    // 获取标准输出的句柄
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    // 设置标准输出设备上光标的位置为pos
    SetConsoleCursorPosition(hOutput, pos);
}

3.2判断一个键是否被按下

按下返回1,没有返回0


//函数写法
void Key_Press_Check()
{
    if((GetAsyncKeyState(VK) & 0x1)==1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
//宏定义写法
#define KEY_PRESS_CHECK(VK) ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )

3.2基于控制台的游戏-贪吃蛇

详见博主另一篇博客:http://t.csdnimg.cn/9ULjS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/573979.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Facebook的魅力魔法:探访数字社交的奇妙世界

1. 社交媒体的演变与Facebook的角色 在数字化时代,社交媒体已经成为我们日常生活中不可或缺的一部分。而在众多的社交媒体平台中,Facebook 以其深厚的历史和广泛的影响力,成为了全球数亿用户沟通、分享和互动的主要场所。从其初创之时起&…

雅特力AT32F435学习——3.PWM实验

PWM实验 定时器浑身都是包其中PWM占大头,因为PWM应用太广了:呼吸灯、电机、蜂鸣器,生日火炬里的声音都是PWM干的,接下来就让我们学一下雅特力AT32F435单片机的PWM吧。 基础知识 老样子对于PWM的基础了解那肯定直接从数据手册学…

动手学深度学习14 数值稳定性+模型初始化和激活函数

动手学深度学习14 数值稳定性模型初始化和激活函数 1. 数值稳定性2. 模型初始化和激活函数3. QA **视频:**https://www.bilibili.com/video/BV1u64y1i75a/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 **电子书:**https://zh-v…

azure云服务器学生认证优惠100刀续订永久必过方法记录

前面的话 前几天在隔壁网站搞了个美国edu邮箱,可以自定义用户名。今天就直接认证Azure,本来打算等GitHub学生包过期后用这个edu邮箱重新认证白嫖Azure的。在昨天无意中看到续期,就把原本那个Azure账号续了一年,所以这个美国edu邮…

25计算机考研院校数据分析 | 浙江大学

浙江大学(Zhejiang University),简称“浙大”,坐落于“人间天堂”杭州。前身是1897年创建的求是书院,是中国人自己最早创办的新式高等学校之一。 浙江大学由教育部直属、中央直管(副部级建制)&a…

一文掌握Vue3:深度解读Vue3新特性、Vue2与Vue3核心差异以及Vue2到Vue3转型迭代迁移重点梳理与实战

每次技术革新均推动着应用性能与开发体验的提升。Vue3 的迭代进步体现在性能优化、API重构与增强型TypeScript支持等方面,从而实现更高效开发、更优运行表现,促使升级成为保持竞争力与跟进现代前端趋势的必然选择。本文深度解读Vue3 响应式数据data、生命…

常用的JDK9-JDK17的一些新增语法特性

目录 1.前言2.一些新增的特性2.1 yield关键字2.2 var关键字2.3 空指针异常2.4 密封类2.5 接口中的私有方法2.6 instanceof2.7 其他 1.前言 从springboot3.0开始,已经不⽀持JDK8了。参考资料 :Spring官方博客。从3.0开始,转变为JDK17。 官方…

使用windows端MySQL创建数据库

1.命令行登录数据库 命令:mysql -u用户名 -p密码; 切记命令后面要以分号结尾 2. 查看和创建数据库 查看数据库命令:show database; 创建数据库命令:mysql> create database db_classes; 创建一个名为db_classes的…

【漏洞复现】WebLogic XMLDecoder反序列化(CVE-2017-10271)

1、漏洞描述 CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。攻击者发送精心构造的xml数据甚至能…

AIGC算法3:Attention及其变体

1.Attention Attention是Transformer的核心部分,Attention机制帮助模型进行信息筛选,通过Q,K,V,对信息进行加工 1.1 attention计算公式 Attention ⁡ ( Q , K , V ) softmax ⁡ ( Q K T d k ) V \operatorname{Attention}(Q, K…

找不到mfc140.dll如何解决?mfc140.dll丢失的几种解决方法分享

在我们启动并开始利用电脑进行日常工作的过程中,如果遭遇了操作系统提示“mfc140.dll文件丢失”的错误信息,导致某些应用程序无法正常运行,这究竟是何种情况呢?小编将介绍计算机缺失mfc140.dll文件的5种解决方法,帮助大…

二叉树数据结构详解及java使用二叉树示例代码

二叉树详解: 二叉树是一种常见的树形数据结构,它由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。 二叉树组成: 节点(Node): 每个节点包含三个要素:数…

【AI学习】RAG与推荐系统

一、《双塔模型的瓶颈究竟在哪?》 文章介绍了谷歌的一篇论文,《Large Dual Encoders Are Generalizable Retrievers》 文章主要在讲,稠密检索模型在OOD(Out-Of-Distribution,即域外)泛化能力不行&#xff…

【Pytorch】(十五)模型部署:ONNX和ONNX Runtime

文章目录 (十五)模型部署:ONNX和ONNX RuntimeONNX 和 ONNX Runtime的关系将PyTorch模型导出为ONNX格式使用Netron可视化ONNX模型图检查ONNX模型验证ONNX Runtime推理结果使用ONNX Runtime运行超分模型 (十五)模型部署&…

外贸干货|真正的销售高手,都很会提问

你的产品性价比很高,为什么客户没有买单呢? 最重要的原因是你没有了解到他真正的需求。 真正的销售高手,应该是一个提问高手,至少要连续问对方6个问题,问出客户的真实需求。 假如他回答你的问题,你有一种&a…

git 冲突与解决冲突

目录 1.使用 git 解决冲突 GIT 常用命令 制造冲突 解决冲突 2.使用 IDEA 解决冲突 产生冲突 解决冲突 1.使用 git 解决冲突 GIT 常用命令 命令作用git clone克隆git init初始化git add 文件名添加到暂存区git commit -m " 日志信息" 文件名提交到本地库git st…

【运维自动化-配置平台】如何通过模板创建集群和模块

通过【每天掌握一个功能点】配置平台如何创建业务机拓扑(集群-模块)我们知道了直接创建集群和模块的操作方法,直接创建的方式适合各集群模块都相对独立的场景,那大量的、标准规范的集群模块如何快速创建呢,这里就引入了…

条件生成对抗网络(cGAN)在AI去衣技术中的应用探索

随着深度学习技术的飞速发展,生成对抗网络(GAN)作为其中的一个重要分支,在图像生成、图像修复等领域展现出了强大的能力。其中,条件生成对抗网络(cGAN)通过引入条件变量来控制生成模型的输出&am…

面试十五 容器

一、vector容器 template<typename T> class Allocator{ public:T* allocator(size_t size){// 负责内存开辟return (T*)malloc(sizeof(T) * size);}void deallocate(void * p){free(p);}void construct(T*p,const T&val){// 定位newnew (p) T(val);}void destroy(…

Golang对接Ldap(保姆级教程:概念搭建实战)

Golang对接Ldap&#xff08;保姆级教程&#xff1a;概念&搭建&实战&#xff09; 最近项目需要对接客户的LDAP服务&#xff0c;于是趁机好好了解了一下。LDAP实际是一个协议&#xff0c;对应的实现&#xff0c;大家可以理解为一个轻量级数据库。用户查询。比如&#xff…
最新文章