数据结构:Win32 API详解
目录
一.Win32 API的介绍
二.控制台程序(Console)与COORD
1..控制台程序(Console):
2.控制台窗口坐标COORD:
3.GetStdHandle函数:
(1)语法:
(2)参数:
4.GetConsoleCursorInfo函数:
(1)语法:
(2)参数:
(3)CONSOLE_CURSOR_INFO结构体:
5.SetConsoleCursorInfo函数:
实例:
6.SetConsoleCursorPosition函数:
(1)语法:
(2)参数:
编辑(3)实例:
7.GetAsyncKeyState函数:
(1)语法:
(2)参数:
一.Win32 API的介绍
二.控制台程序(Console)与COORD
1..控制台程序(Console):
简单来说,我们平常在使用的VS里运行起来的黑框程序其实就是控制台程序
例如我们可以通过cmd命令控制控制台窗口的长度:比如设置控制台窗口的大小为30行 ,100列
这个窗口的打开和使用也很简单:打开搜索栏输入cmd并且以管理员身份运行就可以
同样,vs里也可以进行一样的操作:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{//system函数,用来执行系统命令system("mode con cols=100 lines=30 ");//更改界面大小system("title 贪吃蛇");//修改调试界面的标题,但程序一旦结束,设置的名字也会随之恢复出厂设置//getchar();//为了使标题一直处于一个被修改的状态,故要使程序一直处于运行的状态system("pause");//使程序暂停,也可以实现使程序不终止的效果return 0;
}
2.控制台窗口坐标COORD:
同时,这里还有另外三点需要补充一下:
1.COORD也作为好些函数的返回值(类型)使用,
2.COORD需要引用一个叫做“windows.h”的头文件
3.关于控制台的数轴展示:
3.GetStdHandle函数:
GetStdHandle是⼀个Windows API函数,(返回值为HANDLE(一种指针)),它⽤于从⼀个特定的标准设备(标准输⼊(我们常说的键盘)、标准输出或标 准错误(对应显示器的终端或控制台))中取得⼀个句柄(⽤来标识不同设备的数值),使⽤这个句柄可以操作设备
(这个句柄就相当于我们炒菜时用的锅的把手)
(1)语法:
HANDLE WINAPI GetStdHandle(_In_ DWORD nStdHandle);
(2)参数:
4.GetConsoleCursorInfo函数:
检索有关指定控制台屏幕缓冲区的光标大小和可⻅性的信息
(1)语法:
BOOL WINAPI GetConsoleCursorInfo(_In_ HANDLE, //hConsoleOutput,获取的就是上一个函数联系在一起的标准设备_Out_ PCONSOLE_CURSOR_INFO //lpConsoleCursorInfo,是一个存储着光标信息的结构体
);
(2)参数:
(3)CONSOLE_CURSOR_INFO结构体:
typedef struct _CONSOLE_CURSOR_INFO {DWORD dwSize;BOOL bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
5.SetConsoleCursorInfo函数:
设置指定控制台屏幕缓冲区的光标的⼤⼩和可⻅性
(其参数设置和GetConsoleCursorInfo函数一样)
只不过前者用来获取后者用来实操
实例:
在下面这个隐藏光标的操作里有一点需要注意的就是使用false时要引用“stdbool.h”的头文件
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
//隐藏光标操作
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOutput, &CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo(hOutput, &CursorInfo);//设置控制台光标状态
6.SetConsoleCursorPosition函数:
设置指定控制台屏幕缓冲区中的光标位置,我们将想要设置的坐标信息放在COORD类型的pos中,调 ⽤SetConsoleCursorPosition函数将光标位置设置到指定的位置
(1)语法:
BOOL WINAPI SetConsoleCursorPosition(_In_ HANDLE hConsoleOutput,_In_ COORD dwCursorPosition
);
(2)参数:
(3)实例:
COORD pos = { 10, 5};HANDLE hOutput = NULL;//获取标准输出的句柄(⽤来标识不同设备的数值) hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//设置标准输出上光标的位置为pos SetConsoleCursorPosition(hOutput, pos);
////
//SetPos:封装⼀个设置光标位置的函数
//设置光标的坐标
void SetPos(short x, short y)
{COORD pos = { x, y };HANDLE hOutput = NULL;//获取标准输出的句柄(⽤来标识不同设备的数值) hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//设置标准输出上光标的位置为pos SetConsoleCursorPosition(hOutput, pos);
}
7.GetAsyncKeyState函数:
&:按位与,都1则1,否则为0
(1)语法:
SHORT GetAsyncKeyState([in] int vKey
);
(2)参数:
(这里仅仅展示了部分按键状态的代码)
Win32 API比较常见的函数和基础知识大概就这些,有了这些函数我们就可以自然而然流传的进行与系统的交互,连接上链表的知识,我们也可以试着写一写小项目:贪吃蛇,这个项目的具体实现我会在下面的文章里具体阐述
全文终
相关文章:

数据结构:Win32 API详解
目录 一.Win32 API的介绍 二.控制台程序(Console)与COORD 1..控制台程序(Console): 2.控制台窗口坐标COORD: 3.GetStdHandle函数: (1)语法: (2)参数: 4.GetConsoleCursorInf…...

迁移学习中模型训练加速(以mllm模型为例),提速15%以上
根据模型训练过程的显存占用实测的分析,一个1g参数的模型(存储占用4g)训练大约需要20g的显存,其中梯度值占用的显存约一半。博主本意是想实现在迁移学习(冻结部分参数)中模型显存占用的降低,结果不太满意,只能实现训练速度提升,但无法实现显存占用优化。预计是在现有的…...

socket编程UDP-实现停等机制(接收确认、超时重传)
在下面博客中,我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程,并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接(进阶篇)_udp socket发送-CSDN博客 下面博客实现的是滑动窗口机制: sock…...

前端面试题目 (Node.JS-Express框架)[二]
在 Express 中如何使用 Passport.js 进行身份认证? Passport.js 是一个 Node.js 的身份验证中间件,它可以很容易地与 Express 集成。下面是一个简单的示例,展示了如何使用 Passport.js 进行基本的身份认证。 安装依赖 npm install express passport …...

防范TCP攻击:策略与实践
TCP(传输控制协议)是互联网通信的核心协议之一,它确保了数据在网络上的可靠传输。然而,TCP也容易成为各种网络攻击的目标,如SYN洪水攻击、TCP连接耗尽攻击等。本文将探讨如何通过配置防火墙规则、优化服务器设置以及采…...

3D 生成重建034-NerfDiff借助扩散模型直接生成nerf
3D 生成重建034-NerfDiff借助扩散模型直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 感觉这个论文可能能shapE差不多同时期工作,但是shapE是生成任意种类。 本文提出了一种新颖的单图像视图合成方法NerfDiff,该方法利用神经辐射场 …...

分布式 Paxos算法 总结
前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法(含伪代码)》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…...

我的宝贵经验
在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它是知识传承的载体,是团队协作的桥梁,更是产品成功的幕后英雄。然而,打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼?是否纠结…...

geoserver 瓦片地图,tomcat和nginx实现负载均衡
在地理信息系统(GIS)领域,GeoServer作为一个强大的开源服务器,能够发布各种地图服务,包括瓦片地图服务。为了提高服务的可用性和扩展性,结合Tomcat和Nginx实现负载均衡成为了一个有效的解决方案。本文将详细…...

Jenkins 启动 程序 退出后 被杀死问题
参考 Spawning Processes From Build (jenkins.io) 解决jenkins脚本启动项目后进程被杀死_jenkins杀进程-CSDN博客...

SEGGER | 基于STM32F405 + Keil - RTT组件01 - 移植SEGGER RTT
导言 RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术,它结合了SWO和半主机的优点,具有极高的性能。 使用RTT可以从MCU非常快速输出调试信息和数据,且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU࿰…...

分布式开发学习
1、kratos的特点 gRPC:Kratos 默认支持 gRPC,提供高性能的远程调用能力,适用于微服务间通信。 HTTP :同时支持 HTTP/1.1 和 HTTP/2,方便微服务与外部系统交互。 Protocol Buffers: protoc 工具生…...

freeswitch(开启支持MCU视频会议,使用mod_av模块)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install...

Vue3常见api使用指南(TS版)
defineProps() 和 defineEmits() 内置函数,无需import导入,直接使用。传入到 defineProps 和 defineEmits 的选项会从 setup 中提升到模块的范围。因此,传入的选项不能引用在 setup 范围中声明的局部变量(比如设置默认值时),但是…...

分布式 分布式事务 总结
前言 相关系列 《分布式 & 目录》《分布式 & 分布式事务 & 总结》《分布式 & 分布式事务 & 问题》 分布式事务 所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言,一次完整的交易需要同时调动两个节…...

onnx文件转pytorch pt模型文件
onnx文件转pytorch pt模型文件 1.onnx2torch转换及测试2.存在问题参考文献 从pytorch格式转onnx格式,官方有成熟的API;那么假如只有onnx格式的模型文件,该怎样转回pytorch格式? https://github.com/ENOT-AutoDL/onnx2torch提供了…...

智能座舱人机交互升级
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源&…...

RabbitMQ中点对点(Point-to-Point)通讯方式的Java实现
RabbitMQ是一个广泛使用的开源消息代理软件,它实现了高级消息队列协议(AMQP)。RabbitMQ支持多种消息传递模式,其中最基本的是点对点(Point-to-Point)通讯方式。在这种模式下,消息生产者将消息发…...

爬虫实战:获取1688接口数据全攻略
引言 在电商领域,数据的重要性不言而喻。1688作为中国领先的B2B电商平台,提供了海量的商品数据。通过爬虫技术获取这些数据,可以帮助企业进行市场分析、价格监控和供应链管理。本文将详细介绍如何使用Python爬虫技术合法合规地获取1688接口数…...

生成树协议STP工作步骤
第一步:选择根桥 优先级比较:首先比较优先级,优先级值越小的是根桥MAC地址比较:如果优先级相同,则比较MAC地址。MAC地址小的是根桥。 MAC地址比较的时候从左往右,一位一位去比 第二步:所有非根…...

Android14 AOSP支持短按关机
修改frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java diff --git a/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/base/services/core/java/com/android/server/policy/PhoneWindowManager.java in…...

C# 和 go 关于can通信得 整理
在C#中开发CAN(Controller Area Network)通信接口时,确实有一些现成的NuGet包可以简化你的开发工作。这些库通常提供了与CAN硬件接口通信所需的基本功能,如发送和接收CAN消息。下面是一些常用的NuGet包: PCANBasic.NET…...

vue常用命令汇总
nvm 一个nodejs版本管理工具,解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 npm 可以管理 nodejs 的第三方插件。 vue-cli 是Vue提供的一个官方cli,专门为单页面应用快速搭建繁杂的脚手架。 nginx 是一个高性能的HTTP和反向代理we…...

【C++习题】18.逆波兰表达式求值
题目:逆波兰表达式求值 链接🔗:逆波兰表达式求值 题目: 代码: class Solution {public:int evalRPN(vector<string>& tokens) {stack<int> s;for (size_t i 0; i < tokens.size(); i){string&a…...

本地如何使用 yarn link 调试本地 npm 包
如何使用 yarn link 调试本地 npm 包: 在前端开发中,通常我们会开发并使用许多 npm 包来实现项目的功能。随着开发的深入,我们经常需要调试或修改某些 npm 包的源码。如果你正在开发一个 npm 包,并且希望在本地项目中进行调试&am…...

江恩45年一书的自己一点读书见解
读了下江恩的华尔街45年,有些浅薄的体会,记录下 江恩的华尔街45年里面,感触比较深刻的有以下几点: 1.为什么会亏钱 1.利用大仓位来过度交易,违背了资本安全的原则。买卖过于频繁 2.没有用止损单来保护你的交易。 3.缺…...

影响 Linux、Unix 系统的 CUPS 漏洞可导致 RCE
在经过大量炒作和第三方过早泄露信息之后,安全研究员 Simone Margaritelli 公布了有关通用 UNIX 打印系统 (CUPS) 中的四个零日漏洞的详细信息。 这些漏洞可被远程、未经身份验证的攻击者滥用,在易受攻击的 Linux 和类 Unix 系统上实现代码执行。 CUPS…...

【汇编】思考汇编中的两个基本问题
1. 若干年前的疑问 几年前还在大学学习汇编时,不管是考试还是课程设计,其实都很顺利。但是心里一直对什么时候使用哪个寄存器存在疑惑,编写汇编时,没有十足的把握,都是抱着试一试的心态去完成了课程任务。 工作八年有…...

Nest Dynamic modules 笔记
Nest Dynamic modules 文档地址👈 记录Dynamic modules是因为确实抽象,文档并没有很详细的指出不同方式创建动态模块的区别 两种不同的动态模块创建方式 静态模块传统动态模块方式实现三种不同的方法命名使用ConfigurableModuleBuilder异步动态模块如果…...

生成式AI、大模型、多模态技术开发与应用学习清单
学习目的: 了解AIGC发展现状与核心技术。 掌握Transformer核心开发技术。掌握向量数据库的工作原理、检索算法、主要开源数据库。掌握大模型调用、微调方法。掌握以GPT大语言模型为基础的工作原理。 掌握AIGC技术在跨模态领域的应用技术。了解GPT提示工程和AIGC的安…...