C++之获取Windows系统信息

目录

1. 操作系统版本

2. 获取CPU信息

3. 获取内存信息

4. 获取硬盘信息

5.获取网络接口信息

6.获取计算机名称、用户名


在C++中,你可以使用Windows API函数来获取Windows系统的各种信息。以下是一些常见的API函数和示例代码,用于获取Windows系统信息:

1. 操作系统版本

#include <windows.h>  
#include <iostream>  
​
int main() {OSVERSIONINFOEX osvi;ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
​osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);if (GetVersionEx((OSVERSIONINFO*)&osvi)) {std::cout << "Operating System Version: " << osvi.dwMajorVersion << "." << osvi.dwMinorVersion << std::endl;}
​return 0;
}

2. 获取CPU信息

你可以使用GetSystemInfo函数来获取CPU架构信息。

#include <windows.h>  
#include <iostream>  
​
int main() {SYSTEM_INFO sysInfo;GetSystemInfo(&sysInfo);
​std::cout << "Processor Architecture: ";switch (sysInfo.wProcessorArchitecture) {case PROCESSOR_ARCHITECTURE_AMD64:std::cout << "AMD64" << std::endl;break;case PROCESSOR_ARCHITECTURE_IA64:std::cout << "IA64" << std::endl;break;case PROCESSOR_ARCHITECTURE_INTEL:std::cout << "x86" << std::endl;break;// 其他架构...  default:std::cout << "Unknown" << std::endl;break;}
​return 0;
}

3. 获取内存信息

你可以使用GlobalMemoryStatusEx函数来获取内存信息。

#include <windows.h>  
#include <iostream>  int main() {  MEMORYSTATUSEX statex;  statex.dwLength = sizeof (statex);  GlobalMemoryStatusEx (&statex);  std::cout << "Total physical memory: "  << statex.ullTotalPhys / (1024 * 1024) << " MB" << std::endl;  std::cout << "Available physical memory: "  << statex.ullAvailPhys / (1024 * 1024) << " MB" << std::endl;  return 0;  
}

4. 获取硬盘信息

你可以使用GetDiskFreeSpaceEx函数来获取硬盘的可用空间。

#include <windows.h>  
#include <iostream>  
​
int main() {ULARGE_INTEGER freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes;if (GetDiskFreeSpaceEx(L"C:\\", &freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes)) {std::cout << "Total number of bytes: "<< totalNumberOfBytes.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl;std::cout << "Free bytes available: "<< freeBytesAvailable.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl;}else {std::cerr << "Failed to get disk space information." << std::endl;}
​return 0;
}

5.获取网络接口信息

使用GetAdaptersInfo函数来获取网络接口的信息。

#include <winsock2.h>  
#include <iphlpapi.h>  
#include <iostream>  
​
#pragma comment(lib, "iphlpapi.lib")  
#pragma comment(lib, "ws2_32.lib")  
​
int main() {PIP_ADAPTER_INFO pAdapterInfo;ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO));
​if (pAdapterInfo == NULL) {std::cerr << "Error allocating memory needed to call GetAdaptersInfo" << std::endl;return 1;}
​if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {free(pAdapterInfo);pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);if (pAdapterInfo == NULL) {std::cerr << "Error allocating memory needed to call GetAdaptersInfo" << std::endl;return 1;}}
​if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == NO_ERROR) {PIP_ADAPTER_INFO pAdapter = pAdapterInfo;while (pAdapter) {std::wcout << L"Adapter Name: " << pAdapter->AdapterName << std::endl;std::wcout << L"Description: " << pAdapter->Description << std::endl;std::cout << "IP Address: ";for (PIP_ADDR_STRING pIpAddressList = &pAdapter->IpAddressList; pIpAddressList; pIpAddressList = pIpAddressList->Next) {std::cout << pIpAddressList->IpAddress.String << " ";}std::cout << std::endl;
​// Move to the next adapter  pAdapter = pAdapter->Next;}}else {std::cerr << "GetAdaptersInfo failed with error: " << GetLastError() << std::endl;}
​if (pAdapterInfo) {free(pAdapterInfo);}
​return 0;
}

6.获取计算机名称、用户名

在C++中,你可以使用Windows API函数GetComputerName来获取Windows计算机的名称。

#include <windows.h>
#include <stdio.h>
void GetSysInfo() {
​wchar_t szComputerName[MAXBYTE] = { 0 };wchar_t szUserName[MAXBYTE] = { 0 };unsigned long nSize = MAXBYTE;OSVERSIONINFO OsVer;OsVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);GetVersionEx(&OsVer);
​if (OsVer.dwPlatformId == VER_PLATFORM_WIN32_NT) {if (OsVer.dwMajorVersion == 5 && OsVer.dwMinorVersion == 1) {wprintf(L"window xp %s\r\n", OsVer.szCSDVersion);}else if (OsVer.dwMajorVersion == 5 && OsVer.dwMinorVersion == 0) {wprintf(L"windows 2k \r\n");}else if (OsVer.dwMajorVersion == 6 && OsVer.dwMinorVersion >= 1) {printf("windows win7 \r\n");}}else {wprintf(L"ohter system \r\n");}GetComputerName(szComputerName, &nSize);wprintf(L"computer name is %s \r\n", szComputerName);
​nSize = MAXBYTE;GetUserName(szUserName, &nSize);wprintf(L"user name is %s \r\n", szUserName);
}
​
int main()
{GetSysInfo();system("pause");return 0;
}
​

运行以上代码可能会出现错误

error C4996: 'GetVersionExW': 被声明为已否决

需要关闭SDL

在Visual Studio(VS)中,SDL(Security Development Lifecycle)检查是一个编译时选项,用于增强代码的安全性。SDL是微软开发的一种迭代的安全开发过程,旨在确保在开发早期就考虑并实现安全性和隐私保护。通过结合SDL和Visual Studio的编译时检查,开发人员可以在编译阶段就发现和修复潜在的安全漏洞。

在Visual Studio中启用SDL检查后,编译器会执行一系列额外的安全检查,以确保代码符合安全性和隐私保护的最佳实践。这些检查可能包括检查缓冲区溢出、验证输入数据、防止跨站脚本攻击(XSS)等。如果编译器在代码中发现了潜在的安全问题,它会生成警告或错误,以便开发人员能够及时发现并修复这些问题。

通过启用SDL检查,开发人员可以在整个开发过程中实现更高的安全性和隐私保护水平。这有助于减少在软件发布后发现安全漏洞的风险,并提高用户对软件的信任和满意度。

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

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

相关文章

Nerf原理理解

神经辐射场是一个简单的全连接网络&#xff08;权重约为 5MB&#xff09;&#xff0c;经过训练可使用渲染损失再现单个场景的输入视图。该网络直接从空间位置和观看方向&#xff08;5D 输入&#xff09;映射到颜色和不透明度&#xff08;4D 输出&#xff09;&#xff0c;充当“…

【Kafka系列 06】Kafka Producer源码解析

温馨提示&#xff1a;本文基于 Kafka 2.3.1 版本。 一、Kafka Producer 原理图 生产者的 API 使用还是比较简单&#xff0c;创建一个 ProducerRecord 对象&#xff08;这个对象包含目标主题和要发送的内容&#xff0c;当然还可以指定键以及分区&#xff09;&#xff0c;然后调…

全方位碾压chatGPT4的全球最强模型Claude 3发布!速通指南在此!保姆级教学拿脚都能学会!

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

李沐动手学习深度学习——3.5练习

减少batch_size&#xff08;如减少到1&#xff09;是否会影响读取性能&#xff1f; 肯定会影响&#xff0c;计算机io性能而言&#xff0c;随着batch_size增大&#xff0c;读取越来越快&#xff0c;需要的时间越少。这里会涉及到计算机操作系统的知识点&#xff0c;内存与硬盘之…

第五节 JDBC驱动程序类型

JDBC驱动程序是什么&#xff1f; JDBC驱动程序在JDBC API中实现定义的接口&#xff0c;用于与数据库服务器进行交互。 例如&#xff0c;使用JDBC驱动程序&#xff0c;可以通过发送SQL或数据库命令&#xff0c;然后使用Java接收结果来打开数据库连接并与数据库进行交互。 JDK…

【2024】vue-router和pinia的配置使用

目录 vue-routerpiniavue-routerpinia进阶用法---动态路由 有同学在项目初始化后没有下载vue-router和pinia&#xff0c;下面开始&#xff1a; vue-router npm install vue-router然后在src目录下创建文件夹router&#xff0c;以及下面的index.ts文件&#xff1a; 写进下面的…

华为智慧教室3.0的晨光,点亮教育智能化变革

“教室外有更大的世界&#xff0c;但世界上没有比教室更伟大的地方。” 我们在求学阶段&#xff0c;都听说过这句话&#xff0c;但往往是在走出校园之后&#xff0c;才真正理解了这句话。为了让走出校园的孩子能够有能力&#xff0c;有勇气探索广阔的世界。我们应该准备最好的教…

碳视野|全国首个ESG区域行动方案通过,上海政府推进ESG有八“要”

引领绿色转型&#xff0c;共筑低碳未来&#xff01;AMT企源碳管理团队深入解读碳领域政策、概念及标准&#xff0c;分享实践经验&#xff0c;助力产业绿色发展。我们启动“碳视野、碳课堂、碳实践”三大专栏&#xff0c;紧跟碳行业政策动态&#xff0c;以“科普实践分享”为核心…

Javaweb之SpringBootWeb案例之自动配置案例的自定义starter测试的详细解析

3.2.4.3 自定义starter测试 阿里云OSS的starter我们刚才已经定义好了&#xff0c;接下来我们就来做一个测试。 今天的课程资料当中&#xff0c;提供了一个自定义starter的测试工程。我们直接打开文件夹&#xff0c;里面有一个测试工程。测试工程就是springboot-autoconfigurat…

C++ Floyd求最短路 Floyd算法(多源汇最短路)

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 再给定 k 个询问&#xff0c;每个询问包含两个整数 x 和 y &#xff0c;表示查询从点 x 到点 y 的最短距离&#xff0c;如果路径不存在&#xff0c;则输出 impossible。 数据…

过于老旧的pytorch_ssim包 请从github下载源码

有些冷门算法真的不要随便pip&#xff0c;有可能下载到史前版本…最好还是找源代码 汗 今天要用到SSIM损失函数&#xff0c;从网上简单看了一下原理就想测试一下&#xff0c;偷了一下懒就直接在命令行输入pip install pytorch_ssim了&#xff0c;结果报了一堆错误&#xff08;汗…

Python(NetOps)前传-网络设备开局配置

背景 我们知道用Python在cli配置网络设备的前提是&#xff1a; 网络设备与Python主机网络可达网络设备已开启并完成ssh相关配置 目标 本文已华为S5720S-52P-LI-AC交换机为例&#xff0c;完成&#xff1a; 完成网络设备开局配置&#xff1b;用Python脚本验证ssh登录 配置 …

人人都写过的6个bug

大家好&#xff0c;我是知微。 程序员写bug几乎是家常便饭&#xff0c;也是我们每个人成长过程中难以避免的一部分。 为了缓解这份“尴尬”&#xff0c;今天想和大家分享一些曾经都会遇到过的bug&#xff0c;让我们一起来看看这些“经典之作”。 1、数组越界 #include <…

【单片机学习的准备】

文章目录 前言一、找一个视频是二、画图软件三、装keil5 仿真protues总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、找一个视频是 https://www.b…

MongoDB聚合运算符:$count

文章目录 语法使用举例在$group阶段中使用在$setWindowFields阶段使用 $count聚合运算符返回分组中文档的数量。从5.0开始支持。 语法 { $count: { } }$count不需要参数 使用 $count可以用于下列聚合阶段&#xff1a; $bucket$bucket$group$setWindowFields 在$group阶段中…

基于springboot+vue的校园网上店铺

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

MySQL 学习笔记(基础篇 Day1)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 MySQL 概述 1.1 数据库相关概念 1.2 MySQL 数据库 2 SQL 2.1 SQL 通用语法 2.2 SQL 分类 2.3 DDL 2.4 图形…

计算机网络-第2章 物理层

本章内容&#xff1a;物理层和数据通信的概念、传输媒体特点&#xff08;不属于物理层&#xff09;、信道复用、数字传输系统、宽带接入 2.1-2.2 物理层和数据通信的概念 物理层解决的问题&#xff1a;如何在传输媒体上传输数据比特流&#xff0c;屏蔽掉传输媒体和通信手段的差…

【python高级编程教程】笔记(python教程、python进阶)第三节:(1)多态与鸭子类型(Polymorphism and Duck Typing)

参考文章1&#xff1a;【比刷剧还爽】清华大佬耗时128小时讲完的Python高级教程&#xff01;全套200集&#xff01;学不会退出IT界&#xff01; 参考文章2&#xff1a;清华教授大力打造的Python高级核心技术&#xff01;整整100集&#xff0c;强烈建议学习&#xff08;Python3…

Python 开发图形界面程序

用 Python 语言开发图形界面的程序&#xff0c;有2种选择&#xff1a; Tkinter 基于Tk的Python库&#xff0c;这是Python官方采用的标准库&#xff0c;优点是作为Python标准库、稳定、发布程序较小&#xff0c;缺点是控件相对较少。 PySide2/PySide6 基于Qt 的Python库&#x…