Win32 API

 

个人主页:星纭-CSDN博客

系列文章专栏 : C语言

踏上取经路,比抵达灵山更重要!一起努力一起进步!

一.Win32 API

1.Win32 API介绍

Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外,它同时也是⼀个很⼤ 的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启 视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application),所以便 称之为Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows  32位平台的应⽤程序编程接⼝。Win32 API(Windows API)是一组用于开发Windows应用程序的编程接口。它提供了许多功能,包括图形界面、文件和设备操作、网络通信、多媒体处理等。Win32 API是基于C语言的,开发者可以使用C或C++来编写应用程序。

2.控制台程序 

平常我们运行程序出来的那个黑框程序就是控制台程序 

有些读者的电脑,可能运行程序得到是这样的:

读者可以按照如图所示的操作将其进行更改。 

然后关闭重新运行程序。 就可以得到以下效果。

这样的控制我们是可以对其进行许多的操作的。

我们可以使用cmd命令来设置控制台窗口的大小。参考:mode

     system("mode con cols=100 lines=30");

第一个参数con指的是命令提示符窗口,第二个就是列,第三个就是行。我们可以将这个更改为我们自己想要的值。

如果你觉得窗口最左上角的内容不想要,也可以进行更改。通过命令设置控制台窗口的名字。

    system("title 贪吃蛇");

#include<windows.h>
int main()
{system("mode con cols=100 lines=30");system("title 贪吃蛇");
}

使用system函数 是需要包含头文件windows.h的。

如果读者自行尝试运行以上的代码,会发现,控制台窗口的名字,并没有更改成我们想要的样子。

这是为什么呢?

因为运行完以上代码后,程序就结束了,它就变成了之前的名字。

如果我们再加上一行代码就可以看到想要更改的名字了。

此时的程序会停止下来,如果我们随便按一个键,此时程序就会继续运行,当程序结束后名字又会变回去。

参考:title 

3.控制台程序上的坐标COORD 

 COORD是windows API中定义的一个结构体,定义控制台屏幕缓冲区中字符单元的坐标。 坐标系 (0,0) 的原点位于缓冲区的顶部左侧单元格。

COORD类型的声明

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

给坐标赋值:

COORD pos = { 10,15 };

 4.GetStdHandle函数

GetStdHandle函数是一个windowsAPI函数,它用于从一个特定的标准设备(标准输入,标准输出或者标准错误)中获得一个句柄(来表示不同的设备的数值),使用这个句柄可以操作设备。

	//获得标准输出设备的句柄(来标识不同的设备)HANDLE houtput = NULL;houtput = GetStdHandle(STD_OUTPUT_HANDLE);

这个函数的返回值是一个HANDLE类型的值。

5.GetConsoleCursorInfo 函数 

 GetConsoleCursorInfo 函数可以用于对得到有关指定控制台屏幕缓冲区的光标的大小和可以信息。

 对于这个光标来说,此时的光标是只有25%的,并且可见的,我们可以通过更改光标信息,让其占据满整个字符,或者不可见。

BOOL WINAPI GetConsoleCursorInfo(HANDLE hConsoleOutput,PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
);

 PCONSOLE_CURSOR_INFO 是指向 CONSOLE_CURSOR_INFO 结构的指针,该结构接收有关主机游标。

第一个参数是控制台的句柄,第二个参数是类型是控制光标信息的一个变量的指针。

调用这个函数会把控制台光标的信息存放在第二个参数所指向的变量中。

6.CONSOLE_CURSOR_INFO

这个结构体,包含了控制台光标的信息

typedef struct _CONSOLE_CURSOR_INFO {DWORD dwSize;BOOL  bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

第一个成员变量是控制光标填充字符单元的百分比大小,比如开始的时候,填充大概是25.

第二个成员变量就是控制光标是否可见,如果我们想完成一个游戏,当这个光标一直在屏幕上一闪一闪,难免影响游戏体验,这时候就可以将其设置为不可见。

7.SetConsoleCursorInfo 函数 

SetConsoleCursorInfo 函数可以为指定的控制台屏幕缓冲区设置光标的大小和可见性。

第一个参数句柄,第二个参数是控制台信息。

8.修改光标

学习了上面的知识点,我们就可以尝试按照自己的想法更改光标了。

//}
int main()
{//获得标准输出设备的句柄HANDLE houtput = NULL;houtput = GetStdHandle(STD_OUTPUT_HANDLE);//定义一个光标信息的结构体CONSOLE_CURSOR_INFO cursor_info = {0};//获取和houput句柄相关的控制台上的光标的信息,存放在cursor_info中GetConsoleCursorInfo(houtput,&cursor_info);//修改光标信息cursor_info.dwSize = 100;//占比cursor_info.bVisible = false;//可见度//设置和houtput句柄相关的控制台上的光标的信息SetConsoleCursorInfo(houtput, &cursor_info);printf("光标占比  :%d\n",cursor_info.dwSize);printf("光标可见度:%d\n",cursor_info.bVisible);system("pause");return 0;
}

讲解上面的代码:

 HANDLE houtput是一个变量。通过这个函数GetStdHandle(STD_OUTPUT_HANDLE)从标准输出设备中得到有关其的句柄。返回值用houtput这个接收,这样我们就可以通过这个变量来控制标准输出设备。

CONSOLE_CURSOR_INFO cursor_info这是一个有关控制台光标信息的一个结构体。

 GetConsoleCursorInfo(houtput,&cursor_info);从句柄中得到有关光标的信息,并且存放在上面的结构体中。

然后就可以通过这个结构体更改光标信息,但是实际上,电脑中的这个光标信息是没有变化的,这个结构体只不过是一个光标信息的复制品。

SetConsoleCursorInfo(houtput, &cursor_info);这个函数就根据这个结构体中存储的光标信息,对真正的光标信息,进行更改。

最后打印出这个光标信息。

9.SetConsoleCursorPosition函数

语法:

BOOL WINAPI SetConsoleCursorPosition(_In_ HANDLE hConsoleOutput,_In_ COORD  dwCursorPosition
);

设置指定控制台屏幕缓冲区中的光标位置,我们将想要设置的坐标信息放在COORD类型的变量中,调用该函数将光标位置移动到指定的位置。

	//获得标准输出设备的句柄HANDLE houtput = NULL;houtput = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos = {10, 5};SetConsoleCursorPosition(houtput, pos);Sleep(10000);

可以观察到光标的位置在10,5的位置。

为了方便,我们可以单独封装一个函数来设置光标的位置。

10.getAsyncKeyState 函数

SHORT GetAsyncKeyState(int vKey
);

这个函数将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。GetAsyncKeyState 的返回值是short类型,在上⼀次调⽤ GetAsyncKeyState 函数后,如果 返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,如果最⾼是0,说明按键的状态是抬 起;如果最低位被置为1则说明,该按键被按过,否则为0。 如果我们要判断⼀个键是否被按过,可以检测GetAsyncKeyState返回值的最低值是否为1

#define KEY_PRESS(vk) ((GetAsyncKeyState(vk) & 1) ? 1 : 0)

通过按位与操作符就可以判断最地位是否为1.

虚拟键码:虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn

也可以通过这个返回值是否小于0来判断这个键有没有被按下。

#define KEY_PRESS_sustained(vk) ((GetAsyncKeyState(vk) < 0) ? 1 : 0)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中的线程并行

文章目录 1. 单线程2. 线程池ThreadPoolExecutor 1. 单线程 现在有1154张图片需要顺时针旋转后保存到本地&#xff0c;一般使用循环1154次处理&#xff0c;具体代码如下所示&#xff0c;img_paths中存储1154个图片路径&#xff0c;该代码段耗时约用97ms。 t1time.time() for …

Windows安装VMware(Broadcom)

1.安装前提 1.检查BIOS中是否开启了虚拟化技术。1.1 打开任务管理器&#xff0c;查看性能&#xff0c;CPU部分&#xff0c;虚拟化处于“已启用”状态。1.2 如果没有开启&#xff0c;则需要进入BIOS系统&#xff0c;将 Intel Virtualization Technology改为Enalble。2.下载VMwa…

ROS2入门21讲__第19讲__Rviz:三维可视化显示平台

目录 前言 Rviz三维可视化平台 Rviz介绍 运行方法 彩色相机仿真与可视化 仿真插件配置 运行仿真环境 图像数据可视化 三维相机仿真与可视化 仿真插件配置 运行仿真环境 点云数据可视化 激光雷达仿真与可视化 仿真插件配置 运行仿真环境 点云数据可视化 Rviz v…

【HCIP学习】RSTP和MSTP

一、RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树&#xff09; 1、背景&#xff1a;RSTP从STP发展而来&#xff0c;具备STP的所有功能&#xff0c;可以兼容stp运行 2、RSTP与STP不同点 &#xff08;1&#xff09;减少端口状态 STP:disabled\blockin…

【Python搞定车载自动化测试】——Python实现CAN总线Bootloader刷写(含Python源码)

系列文章目录 【Python搞定车载自动化测试】系列文章目录汇总 文章目录 系列文章目录&#x1f4af;&#x1f4af;&#x1f4af; 前言&#x1f4af;&#x1f4af;&#x1f4af;一、环境搭建1.软件环境2.硬件环境 二、目录结构三、源码展示1.诊断基础函数方法2.诊断业务函数方法…

《最新出炉》系列入门篇-Python+Playwright自动化测试-40-录制生成脚本

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 各种自动化框架都会有脚本录制功能&#xff0c; playwright这么牛叉当然也不例外。很早之前的selenium、Jmeter工具&#xff0c;发展到每种浏览器都有对应的录制插件。今天我们…

python机器学习及深度学习在空间模拟与时间预测

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247628504&idx2&sn6fe3aeb9f63203cfe941a6bb63b49b85&chksmfa77a9e5cd0020f3aa4f01887e75b15096a182c2b5b42c1044787aa285c650f1469a0ef28aec&token2124656491&langzh_CN&scene21#we…

C++语法|虚函数与多态详细讲解(六)|如何解释多态?(面试向)

系列汇总讲解&#xff0c;请移步&#xff1a; C语法&#xff5c;虚函数与多态详细讲解系列&#xff08;包含多重继承内容&#xff09; 多态分为了两种&#xff0c;一种是静态的多态&#xff0c;一种是动态的多态。 静态&#xff08;编译时期&#xff09;的多态 函数重载 boo…

基于51单片机温度报警系统—数码管显示

基于51单片机温度报警系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.DS18B20采集温度&#xff0c;数码管显示温度&#xff1b; 2.温度测量范围&#xff1a;0-99度&#xff1b; 3.当温度低于…

NDIS小端口驱动开发(三)

微型端口驱动程序处理来自过度驱动程序的发送请求&#xff0c;并发出接收指示。 在单个函数调用中&#xff0c;NDIS 微型端口驱动程序可以指示具有多个接收 NET_BUFFER_LIST 结构的链接列表。 微型端口驱动程序可以处理对每个NET_BUFFER_LIST结构上具有多个 NET_BUFFER 结构的多…

阻塞信号集和未决信号集_代码实现

1. 程序验证内容 将编号为0,1,2添加到阻塞信号集中&#xff0c;i<信号编号时&#xff0c;发出信号&#xff0c;观察未决信号集状态 当解除阻塞后&#xff0c;原先的信号是否执行&#xff0c;执行顺序是什么 2. 代码实现 #include <unistd.h> #include <stdlib.h…

【全开源】海报在线制作系统源码(ThinkPHP+FastAdmin+UniApp)

打造个性化创意海报的利器 引言 在数字化时代&#xff0c;海报作为一种重要的宣传媒介&#xff0c;其设计质量和效率直接影响着宣传效果。为了满足广大用户对于个性化、高效制作海报的需求&#xff0c;海报在线制作系统源码应运而生。本文将详细介绍海报在线制作系统源码的特…

Spring AI实战之二:Chat API基础知识大串讲(重要)

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos Spring AI实战全系列链接 Spring AI实战之一&#xff1a;快速体验(OpenAI)Spring AI实战之二&#xff1a;Chat API基础知识大串讲(重要)SpringAIOllama三部曲…

JavaFX学习教程二

一、JavaFX 体系结构 JavaFX 场景图(Scene Graph)是构建 JavaFX 应用程序的起点&#xff0c;一种树状数据结构&#xff0c;用于排列&#xff08;和分组&#xff09;图形对象&#xff0c;以便于逻辑表示。 stage:舞台&#xff0c;操作系统窗口的 JavaFX 表示&#xff0c;是所有…

Qt for android 获取USB设备列表(一)Java方式 获取

简介 QtActivity 作为 Qt 应用程序的入口点&#xff0c;负责启动和配置 Qt 应用程序的信息&#xff0c; 后面我们继承 QtActivity 做自定义控制&#xff0c;了解一下 Activity 生命周期概念&#xff0c; 因为 QtActivity 继承自Android的activity&#xff0c;使用周期函数完成我…

VMare下载安装

一.下载 1.百度搜索BROADCOM官网 打开官网&#xff1a; https://www.broadcom.com/​ 2.点击右上角&#xff0c;进行账号注册&#xff0c;注册好后&#xff0c;进行登陆 3.注册好后&#xff0c;进入个人界面&#xff1a;https://support.broadcom.com/#. 按下图所示点击进…

VMware虚拟机中ubuntu使用记录(10)—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ORB_SLAM3源码编译二、ORB_SLAM3实时单目相机测试1. 查看摄像头的话题2. 运行测试 三. 运行测试可能的报错1. 报错一(1) 问题描述(2) 原因分析(3) 解决 2. …

大作业爬取手机数据,实现手机推荐系统以及朋友圈手机论坛

1、功能简介 &#xff08;1&#xff09;用户注册与用户登录 &#xff08;2&#xff09;手机搜索、手机比拼、手机个性化推荐 &#xff08;3&#xff09;点击搜索的手机图片会就用户行为&#xff0c;轮播展示用户行为&#xff0c;推荐点击次数靠前的手机 &#xff08;4&#xf…

基于springboot+vue的智慧外贸平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

论文精读:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face Status: Reading Author: Dongsheng Li, Kaitao Song, Weiming Lu, Xu Tan, Yongliang Shen, Yueting Zhuang Institution: 微软亚洲研究院&#xff08;Microsoft Research Asia&#xff09;, 浙江…