C++之获取Windows系统信息

news2024/11/25 2:53:02

目录

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.coloradmin.cn/o/1494541.html

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

相关文章

⭐每天一道leetcode:35.搜索插入位置(简单;二分速查)

⭐今日份题目 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例1 输入: nums [1,3,5,6], target 5 输出: 2 …

计算机体系结构:VLIW

原文来自知乎 计算机体系结构&#xff1a;VLIW 本文主要介绍计算机体系结构中的VLIW&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f…

8套成熟在用的三级医院信息化系统源码,HIS、LIS、PACS、智慧导诊、线上预约挂号支付系统源码

8套成熟在用的二级医院、三级医院医院管理系统源码&#xff0c;均有自主知识产权&#xff0c;应用案例&#xff0c;系统稳定运行中。可直接上手项目&#xff0c;支持二次开发 ▶ 一、SaaS模式Java语言开发的云HIS系统源码 在公立二甲医院应用三年&#xff0c;融合B/S版电子病历…

[项目设计] 从零实现的高并发内存池(四)

&#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[高并发内存池] ❤️ 前置学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 ​ 目录 6.内存回收 6.1 ThreadCache回收内存 6.2 CentralCache回收内存 Rele…

Docker安装+基础命令

一、检测、配置安装环境 &#xff08;1&#xff09;查看linux版本&#xff0c;是否符合>centos 7 &#xff08;2&#xff09;查看网络是否通畅 &#xff08;3&#xff09;安装gcc&#xff0c;gcc-c编译器 &#xff08;4&#xff09;安装device-mapper-persistent-data和lvm2…

【LabVIEW FPGA】CIC滤波器

一、CIC滤波器应用概述 在通信数字信号上下变频时&#xff0c;经常会用到对数字信号的升采样和降采样&#xff0c;即通过CIC数字速率器实现变采样率。 二、滤波器IP 首先设置滤波器基本参数&#xff08;filter specification&#xff09; 滤波器类型&#xff08;Filter Type…

2024年阿里云域名优惠口令更新,亲测有效口令大全

2024年阿里云域名优惠口令&#xff0c;com域名续费优惠口令“com批量注册更享优惠”&#xff0c;cn域名续费优惠口令“cn注册多个价格更优”&#xff0c;cn域名注册优惠口令“互联网上的中国标识”&#xff0c;阿里云优惠口令是域名专属的优惠码&#xff0c;可用于域名注册、续…

【图形学中的数学】GAMES001

目录 0 引言1 线性代数基础1.1 向量&#xff08;Vector&#xff09;1.2 向量空间&#xff08;Vector Space&#xff09;1.3 线性组合1.4 图形学研究的维度1.5 矩阵&#xff08;Matrix&#xff09;1.5.1 矩阵单目运算1.5.2 低维变换矩阵 1.6 齐次坐标 &#x1f64b;‍♂️ 作者&…

使用数据库实现增删改查

#include<myhead.h>//定义添加数据函数int do_add(sqlite3 *ppDb) {//1.准备sql语句,输入要添加的信息int add_numb; //工号char add_name[20]; //姓名char add_sex[10]; //性别double add_score; //工资printf("请输入要添加的工号:")…

leetcode 热题 100_最大子数组和

题解一&#xff1a; 动态规划&#xff1a;这是一道经典的动态规划题。维护一个dp数组&#xff0c;dp[i]表示0~i组成的数组的最大子数组和。当数组长度为1时&#xff0c;最大和连续子数组是它本身&#xff0c;也就是dp[i]nums[i]。当数组长度每增加1时&#xff0c;最大和连续子数…

每日力扣——滑动窗口与前 K 个高频元素

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害。 滑动窗口最大值 给定一个数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑…

开展庆2024年“三八”国际妇女节系列纪念活动怎样向媒体投稿?

为了向媒体投稿,庆祝2024年“三八”国际妇女节系列纪念活动,你可以遵循以下步骤: 策划与准备: 确定纪念活动的主题和目标,例如提升女性权益、表彰女性成就、促进性别平等。 策划一系列活动,如研讨会、表彰仪式、展览、讲座等,确保内容丰富多样。 准备相关的背景资料、活动介…

DR模式下LVS负载均衡聚集部署实验

目录 1、实验准备 2、配置负载调度器&#xff08;ens33&#xff1a;192.168.80.9 VIP:192.168.80.188&#xff09; 2.1 配置虚拟ip地址&#xff08;VIP&#xff1a;192.168.80.188&#xff09; 2.2 调整proc响应参数 2.3 设置负载分配策略 3、部署共享存储&#xff08;NF…

Win11桌面出现的这个图标“了解此图片”怎么关闭?

&#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609; 在csdn获奖荣誉: &#x1f3c6;csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ …

代码随想录刷题笔记-Day29

1. N皇后 51. N 皇后https://leetcode.cn/problems/n-queens/ 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数…

《金三银四求职攻略》:程序员面试季倒计时

程序员的金三银四求职宝典 大家好&#xff0c;我是小明&#xff0c;一位即将面临春季求职季的程序员。在这个黄金时段&#xff0c;如何在众多应聘者中脱颖而出&#xff0c;拿下理想的offer&#xff0c;成为了我思考的重点。今天&#xff0c;我将分享一些我个人的求职攻略&…

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

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

【爬虫】单首音乐的爬取(附源码)

以某狗音乐为例 import requests import re import time import hashlibdef GetResponse(url):# 模拟浏览器headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0}# 发送请求…

[动态规划]---part2

前言 作者&#xff1a;小蜗牛向前冲 专栏&#xff1a;小蜗牛算法之路 专栏介绍&#xff1a;"蜗牛之道&#xff0c;攀登大厂高峰&#xff0c;让我们携手学习算法。在这个专栏中&#xff0c;将涵盖动态规划、贪心算法、回溯等高阶技巧&#xff0c;不定期为你奉上基础数据结构…

Stable Diffusion WebUI API http://127.0.0.1:7860/docs空白

在尝试调用Stable Diffusion WebUI API的时候&#xff0c;打开http://127.0.0.1:7860/docs遇到了以下页面 网络诊断是这样的原因&#xff1a; 修bug&#xff0c;改来改去遇到了以下两种页面&#xff1a; 此时http://127.0.0.1:7860可以如下正常显示&#xff1a; 查资料的时候找…