win32 API 函数

news2024/11/18 8:57:07

目录

  • win32 API 的介绍
  • 控制台程序
  • COORD结构体
  • GetStdHandle函数
  • GetConsoleCursorInfo函数
  • SetConsoleCursorInfo函数
  • SetConsoleCursorInfo函数
  • GetAsyncKeyState函数

win32 API 的介绍

WIN32API就是Microsoft
Windows32位平台的应⽤程序编程接⼝
win32 API 中有许多可以调用的函数
下面就为大家介绍一下这些函数

控制台程序

控制台成序就是我们电脑上的cmd命令
也是我们程序运行时的框框
我们可以调整控制台的大小和名字
这些功能要在system函数上实现
而system需要的头文件是stdlib.h

//system 函数可以来执行系统命令
ststem("mode con cols=10 line=20");
//调整控制台的列为10,行为20
system("title 贪吃蛇");
//将控制台的名字命名为贪吃蛇

COORD结构体

COORD表示一个字符在控制台上的坐标
需要的头文件:windows.h

typedef struct _COORD
{
   SHORT X;//横坐标
   SHORT Y;//纵坐标
}COORD,* PCOORD;
int main()
{
	COORD pos = { 10,20 };
	//表示pos坐标x是10,y是20
	//COORD pos1 = { 2,3 };
}

GetStdHandle函数

GetStdHandle函数的返回值是HANDLE
参数:
标准输入设备:键盘
标准输出设备和标准错误设备:屏幕

HANDLE GetStdHandle(DWORD nStdHandle);
// HANDLE是void* 的指针变量

在这里插入图片描述
举个例子:

//获取标准输出设备的句柄
//句柄:可以理解为把手,抓手,用来标识不同设备的数值
//句柄用于操作控制台
HANDLE output = NULL;
output = GetStdHandle(STD_OUTPUT_HANDLE);

GetConsoleCursorInfo函数

GetConsoleCurslrInfo的功能是控制光标大小和(光标的可见性)隐藏光标
获得光标的信息
参数1:句柄
参数2:从句柄中获取光标信息放入结构体指针(CONSOLE_CURSOR_INFO)中
返回值:是布尔类型,true真,false假
需要的头文件:stdbool.h

typedef struct _CONSOLE_CURSOR_INFO
{
 DWORD dwSize;//光标所占百分比
 BOOL bvisible;//光标的可见性,光标可见为true,不可见为false
}

在这里插入图片描述

SetConsoleCursorInfo函数

用于设定控制台中光标的大小和可见性
参数和返回值和GetConsoleCursorInfo相似
在这里插入图片描述

#include<stdbool.h>
int main()
{
	//获取标准输出设备的句柄
	HANDLE houtput = NULL;
	houtput = GetStdHandle(STD_OUTPUT_HANDLE);
	//标准输出设备: 屏幕
	//标准输出设备: 键盘

	//定义一个光标信息的结构体
	CONSOLE_CURSOR_INFO curson_info = { 0 };

	//获取和houtput句柄有关的控制台上的光标信息,存放在 curson_info中
	GetConsoleCursorInfo(houtput,&curson_info);

	//修改光标的占比
	curson_info.dwSize = 100;

	//把光标设置为不可见
	//curson_info.bVisible = false;

	//设置和houtput句柄相关的控制台上的光标信息
	SetConsoleCursorInfo(houtput, &curson_info);

	getchar();

	return 0;
}

光表占比为100
在这里插入图片描述
设置光标为不可见
在这里插入图片描述

SetConsoleCursorInfo函数

用于设置光标的位置

BOOL WINAPI SetConsoleCursorPosition
(
   HANDLE hConsoleOutput;//句柄
   COORD pos;//光标的位置
);
int main()
{
	//获取标准输出设备的句柄
	HANDLE houtput = NULL;
	houtput = GetStdHandle(STD_OUTPUT_HANDLE);

	//光标的位置
	COORD pos = { 10,20 };

	//设置光标的位置
	SetConsoleCursorPosition(houtput, pos);
	printf("hehe\n");

	getchar();

	return 0;
}

在这里插入图片描述
也可以封装一个函数来实现设置坐标的位置

//可以封装一个函数,设置光标的位置
void set_pos(short x,short y)
{
	//获取标准输出设备的句柄
	HANDLE houtput = NULL;
	houtput = GetStdHandle(STD_OUTPUT_HANDLE);

	//光标的位置
	COORD pos = {x,y};

	//设置光标的位置
     SetConsoleCursorPosition(houtput, pos);

}

int main()
{
	int x = 0;
	int y = 0;
	scanf("%d %d",&x,&y);

	set_pos(x, y);
	printf("hehe\n");
	getchar();

	return 0;
}

在这里插入图片描述

GetAsyncKeyState函数

用于获取按键的情况
将键盘上的虚拟键的键值传给函数,通过返回值判断按键的状态
返回值为short类型,调用GetAsyncKeyState后,short中的16个比特位,如果最高位为1,说明按键的状态是按下,如果最高位是0,说明按键的状态是抬起
如果最低位是1,说明按键被按过,否则为0
我们要判断一个键是否被按过,要检测函数的返回值的最低位是否是1

虚拟键值:
在这里插入图片描述

SHORT GetAsyncKeyState
(
   int vKey;//虚拟键的键值
);
#define PRESS_KEY(VK)  (((GetAsyncKeyState(VK))&(1))?1:0)
//按过了是 1 比如: 0000000000000111 & 0000000000000001 = 1
//没按过是0与1  0 比如: 0000000000000000 & 0000000000000001 = 0

int main()
{
	short vk = GetAsyncKeyState(0x35);
	//0x35是按键5,按下5就是数字5
	if ((vk & 1) == 1)
	{
		printf("按过了\n");
	}
	else if((vk&1) == 0)
	{
		printf("未按过\n");
	}

	return 0;
}

再举个例子:

#define KEY_PRESS(VK)  (((GetAsyncKeyState(VK))&(1))?1:0)
int main()
{
	while (1)
	{
		if (KEY_PRESS(0x30))
			        {
			            printf("0\n");
			        }
			        else if (KEY_PRESS(0x31))
			        {
			            printf("1\n");
			        }
			        else if (KEY_PRESS(0x32))
			        {
			            printf("2\n");
			        }
			        else if (KEY_PRESS(0x33))
			        {
			            printf("3\n");
			        }
			        else if (KEY_PRESS(0x34))
			        {
			            printf("4\n");
			        }
			        else if (KEY_PRESS(0x35))
			        {
			            printf("5\n");
			        }
			        else if (KEY_PRESS(0x36))
			        {
			            printf("6\n");
			        }
			        else if (KEY_PRESS(0x37))
			        {
			            printf("7\n");
			        }
			        else if (KEY_PRESS(0x38))
			        {
			            printf("8\n");
			        }
			        else if (KEY_PRESS(0x39))
			        {
			            printf("9\n");
			        }
			    }

	return 0;
}

这里输入按键1,1会被吸收,然后去判断是否为真,如果为真,就打印1
按了1肯定为真,没按为假,什么也不显示
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ZBrush】制作章鱼练习 02——足部

本篇效果 步骤 笔刷工具选择“Move” 按下X键激活对称&#xff0c;然后往外拉 这里拉出6条腿的基底 笔刷工具选择“CurveTube” 绘制腿&#xff0c;可以发现此时腿部起始点和终点的粗细一样&#xff0c;但是真实的章鱼腿部应该是根部较粗&#xff0c;脚部较细 因此我们先回撤一…

网络流问题详解

1. 网络最大流 1.1 容量网络和网络最大流 1.1.1 容量网络 设 G(V, E)是一个有向网络&#xff0c;在 V 中指定了一个顶点&#xff0c;称为源点&#xff08;记为 Vs&#xff09;&#xff0c;以及另一个顶点&#xff0c;称为汇点&#xff08;记为 Vt&#xff09;&#xff1b;对…

淘宝/天猫获取sku详细信息 API,item_sku-获取sku详细信息

淘宝/天猫获取sku详细信息 API,item_sku-获取sku详细信息 示例&#xff1a; {"seller_rate": true,"timeout_action_time": "2000-01-01 00:00:00","iid": "152e442aefe88dd41cb0879232c0dcb0","num": 10,"…

网络工程师---第七天

光纤分类&#xff1a; 光纤熔接技术&#xff1a; 光纤熔接技术主要是用熔纤机将光纤和光纤或光纤和尾纤连接&#xff0c;把光缆中的裸纤和光纤尾纤熔合在一起变成一个整体&#xff0c;而尾纤则有一个单独的光纤头。 曼彻斯特编码&#xff1a; 曼彻斯特编码也称为相位编码&…

Unity HDRP Water Surface 水系统 基础教程

Unity HDRP Water Surface 水系统 基础教程 Unity Water SurfaceUnity 项目创建Unity Water Surface&#xff1a;Ocean&#xff08;海洋&#xff09;简介Ocean&#xff1a;Transform、GeneralOcean&#xff1a;Simulation&#xff08;仿真模拟&#xff09;Ocean&#xff1a;Sim…

protobuf抓包,读包

protobuf抓包 有时候会遇到使用protobuf协议的http请求, 而protobuf封包后的二进制几乎不可读, 如何调试呢 protobuf就是类似一个json的数据传输协议, 相比json更快, 体积更小; 缺点就是不可读 Content-Type: application/x-protobuf数据大概是下面这样的(浏览器开发者工具 自…

Unity之圆环slider

一、参考文章 Unity_圆环滑动条&#xff08;圆形、弧形滑动条&#xff09;_unity弧形滑动条-CSDN博客 此滑动条拖动超过360后继续往前滑动值会从0开始&#xff0c;正常我们超过360度时不可在滑动。 二、 超过360度不可滑动问题解决 参考HTML文章制作&#xff1a; https://www.c…

[svelte]属性和逻辑块

属性 / Default values • Svelte 教程 | Svelte 中文网 属性 Declaring props 到目前为止&#xff0c;我们只处理了内部状态——也就是说&#xff0c;这些值只能在给定的组件中访问。 在任何实际应用程序中&#xff0c;都需要将数据从一个组件向下传递到其子组件。为此&…

Linux安装不在软件商店,安装外部包(如loki.rpm或<包>.deb)结尾程序

如图所示有时我们想要了解更多信息所以就必须了解 Centos 7外部包管理 当使用 CentOS 7 的 RPM 命令时&#xff0c;从入门到进阶&#xff0c;以下是一些高频用法示例&#xff0c;以帮助你更好地使用和管理软件包&#xff1a; 入门级别&#xff1a; 安装软件包&#xff1a; 使…

代码随想录训练营Day 27|Python|Leetcode|122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获…

基于SpringBoot+Vue的物业管理系统 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库&#xff1a;Mysql5.7/8.0 数据表&#xff1a;28张 开发语言&#xff1a;Java(jdk1.8) 开发工具&#xff1a;idea 前端技术&#xff1a;vue 后端技术&#xff1a;SpringBoot 功能简介 项目获取关键字&#xff1a;物业…

从技术层面探讨小程序智能名片商城系统中的AI、ERP、OA、SCRM技术应用

随着信息技术的迅猛发展&#xff0c;智能名片商城系统已逐渐成为现代商业运营不可或缺的重要工具。AI、ERP、OA、SCRM等多种技术的融合应用&#xff0c;不仅提升了商城的运营效率和用户体验&#xff0c;更为商家带来了前所未有的商业价值。下面&#xff0c;我们将结合具体案例&…

springboot 启动非web应用

问题描述 非web应用&#xff0c;启动完成自动退出 问题原因 因为任务完成了&#xff0c;所以系统退出了。需要给spring一个任务&#xff0c;而且这个任务无法解决 包括&#xff1a; web定时任务一个无法完成的任务 解决方案 其中一个是&#xff1a; 非web不自动退出 注意…

jvm-接口调用排查

问题描述 线上碰到个问题&#xff0c;某个接口调用时间特别长&#xff0c;线上调用接口直接报gateway time out 分析处理 1、先关闭该功能 &#xff08;该功能是非核心功能&#xff09; 2、本地起服务连环境排查&#xff0c;发现本地正常。并且线上其他接口正常&#xff0c;…

c++补充

构造函数、析构函数 #include <iostream> using namespace std;// 构造函数、析构函数 // --- "构造函数"类比生活中的"出厂设置" --- // --- "析构函数"类比生活中的"销毁设置" --- // 如果我们不写这两种函数&#xff0c;编译…

Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)

文章目录 一、JavaFx介绍1、JavaFx简介2、可用性3、主要特征4、UI控件 二、JavaFx概述1、JavaFx结构图2、JavaFx组件&#xff08;1&#xff09;舞台&#xff08;2&#xff09;场景① 场景图② 节点 &#xff08;3&#xff09;控件&#xff08;4&#xff09;布局&#xff08;5&a…

Xinstall:让URL打开App变得如此简单

在移动互联网时代&#xff0c;App已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;在使用App的过程中&#xff0c;我们常常会遇到一些烦恼。比如&#xff0c;当我们通过一个网页链接想要打开对应的App时&#xff0c;往往需要先复制链接&#xff0c;然后在App中粘贴&a…

​​​​​​​iOS配置隐私清单文件App Privacy Configuration

推送到TestFlight后邮件收到警告信息如下&#xff0c;主要关于新的隐私政策需要补充&#xff1a; Hello, We noticed one or more issues with a recent submission for TestFlight review for the following app: AABBCC Version 10.10.10 Build 10 Although submission for …

如何在vue项目的package.json插件中使用本地文件,不走node_module打包逻辑

在src同级目录新建libs目录存放你的插件文件夹。 package.json文件&#xff1a;将插件路径改为项目根目录相对路径。 page页面内引用插件后&#xff0c;尽情使用你的插件。

Vue3+Spring Boot3实现跨域通信解决办法

Vue3Spring Boot3实现跨域通信解决办法 1 跨域是什么&#xff1f;2 何为同源呢?3 解决办法3.1 全局配置3.1.1 实现CorsFilter过滤器3.1.2 实现SpringMVC配置类3.1.3 创建CorsFilterFactory工厂类返回CorsFilter对象 3.2 局部跨域3.2.1 注解配置3.2.2 手动设置响应头(局部跨域)…