C++使用windwos?api實(shí)現(xiàn)獲取計(jì)算機(jī)基本信息
一、windwos系統(tǒng)包含的基本信息
Windows 計(jì)算機(jī)的基本信息包括以下內(nèi)容:
計(jì)算機(jī)名稱(chēng):計(jì)算機(jī)的名稱(chēng)是由用戶在安裝 Windows 時(shí)指定的,可以通過(guò)計(jì)算機(jī)屬性或命令行工具獲取。
操作系統(tǒng)版本:包括 Windows 版本、版本號(hào)、服務(wù)包等信息??梢酝ㄟ^(guò)運(yùn)行 winver 命令或者在計(jì)算機(jī)屬性中查看。
處理器信息:包括制造商、型號(hào)、速度等信息??梢酝ㄟ^(guò)設(shè)備管理器、任務(wù)管理器或者系統(tǒng)信息工具來(lái)獲取。
內(nèi)存信息:包括總內(nèi)存容量、可用內(nèi)存、內(nèi)存使用率等信息??梢酝ㄟ^(guò)任務(wù)管理器或者系統(tǒng)信息工具來(lái)獲取。
硬盤(pán)信息:包括硬盤(pán)總?cè)萘?、已用容量、可用容量等信息??梢酝ㄟ^(guò)資源管理器、磁盤(pán)管理器或者系統(tǒng)信息工具來(lái)獲取。
顯示器信息:包括分辨率、色彩深度、顯示器型號(hào)等信息??梢酝ㄟ^(guò)顯示器屬性或者設(shè)備管理器來(lái)獲取。
網(wǎng)絡(luò)信息:包括網(wǎng)絡(luò)適配器型號(hào)、IP 地址、MAC 地址等信息??梢酝ㄟ^(guò)命令行工具如 ipconfig 或者設(shè)備管理器來(lái)獲取。
驅(qū)動(dòng)程序信息:包括各種硬件設(shè)備的驅(qū)動(dòng)程序版本號(hào)??梢酝ㄟ^(guò)設(shè)備管理器或者系統(tǒng)信息工具來(lái)獲取。
電源信息:包括當(dāng)前電源計(jì)劃、電池電量等信息??梢酝ㄟ^(guò)電源選項(xiàng)或者電池管理器來(lái)獲取。
其他硬件信息:包括鍵盤(pán)、鼠標(biāo)、打印機(jī)等硬件設(shè)備的信息。可以通過(guò)設(shè)備管理器或者系統(tǒng)信息工具來(lái)獲取。
二、獲取信息的方法(附代碼)
以下是使用 C++ 獲取 Windows 計(jì)算機(jī)基本信息的示例代碼:
#include <iostream>
#include <windows.h>
#include <tchar.h>
#pragma comment(lib, "version.lib")
int main() {
// 獲取操作系統(tǒng)版本信息
OSVERSIONINFOEX osvi = {0};
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
GetVersionEx((LPOSVERSIONINFO)&osvi);
std::cout << "Operating System: Windows " << osvi.dwMajorVersion << "." << osvi.dwMinorVersion << "." << osvi.dwBuildNumber << std::endl;
// 獲取處理器信息
SYSTEM_INFO sysinfo = {0};
GetSystemInfo(&sysinfo);
std::cout << "Processor: " << sysinfo.dwNumberOfProcessors << " x " << sysinfo.dwProcessorType << " MHz" << std::endl;
// 獲取內(nèi)存信息
MEMORYSTATUSEX meminfo = {0};
meminfo.dwLength = sizeof(MEMORYSTATUSEX);
GlobalMemoryStatusEx(&meminfo);
std::cout << "Memory: " << meminfo.ullTotalPhys / (1024 * 1024) << " MB" << std::endl;
// 獲取硬盤(pán)信息
ULARGE_INTEGER diskinfo = {0};
GetDiskFreeSpaceEx(_T("C:\\"), NULL, &diskinfo, NULL);
std::cout << "Disk: " << diskinfo.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl;
// 獲取顯示器信息
HDC hdc = GetDC(NULL);
int width = GetDeviceCaps(hdc, HORZRES);
int height = GetDeviceCaps(hdc, VERTRES);
int bpp = GetDeviceCaps(hdc, BITSPIXEL);
ReleaseDC(NULL, hdc);
std::cout << "Display: " << width << " x " << height << " x " << bpp << " bits" << std::endl;
// 獲取網(wǎng)絡(luò)信息
IP_ADAPTER_INFO* adapterinfo = NULL;
DWORD buflen = 0;
GetAdaptersInfo(NULL, &buflen);
adapterinfo = (IP_ADAPTER_INFO*) malloc(buflen);
GetAdaptersInfo(adapterinfo, &buflen);
std::cout << "Network: " << adapterinfo->IpAddressList.IpAddress.String << std::endl;
free(adapterinfo);
// 獲取驅(qū)動(dòng)程序信息
TCHAR filename[MAX_PATH] = {0};
GetModuleFileName(NULL, filename, MAX_PATH);
DWORD handle = 0;
DWORD size = GetFileVersionInfoSize(filename, &handle);
if (size > 0) {
BYTE* buffer = new BYTE[size];
if (GetFileVersionInfo(filename, handle, size, buffer)) {
VS_FIXEDFILEINFO* fileInfo = NULL;
UINT len = 0;
if (VerQueryValue(buffer, _T("\\"), (void**)&fileInfo, &len)) {
std::cout << "Driver Version: " << HIWORD(fileInfo->dwProductVersionMS) << "." << LOWORD(fileInfo->dwProductVersionMS) << "." << HIWORD(fileInfo->dwProductVersionLS) << "." << LOWORD(fileInfo->dwProductVersionLS) << std::endl;
}
}
delete[] buffer;
}
return 0;
}在代碼中,我們首先獲取操作系統(tǒng)版本信息,包括主版本號(hào)、次版本號(hào)和構(gòu)建號(hào)。然后獲取處理器信息,包括處理器數(shù)量和主頻。接著獲取內(nèi)存信息,包括總內(nèi)存大小。然后獲取硬盤(pán)信息,包括剩余磁盤(pán)空間大小。接著獲取顯示器信息,包括屏幕分辨率和位深。然后獲取網(wǎng)絡(luò)信息,包括本地 IP 地址。最后獲取驅(qū)動(dòng)程序信息,包括文件版本號(hào)。
注意,這些信息只是 Windows 計(jì)算機(jī)的基本信息,還有許多其他的系統(tǒng)信息可以獲取,例如電源狀態(tài)、進(jìn)程列表、網(wǎng)絡(luò)連接等等,需要調(diào)用不同的 Windows API 函數(shù)來(lái)獲取。
三、獲取windwos電源信息
以下是使用 C++ 獲取 Windows 電源信息的代碼:
#include <Windows.h>
#include <PowrProf.h>
#include <iostream>
#pragma comment(lib, "PowrProf.lib")
int main()
{
SYSTEM_POWER_STATUS powerStatus;
if (GetSystemPowerStatus(&powerStatus))
{
std::cout << "AC Line Status: " << static_cast<int>(powerStatus.ACLineStatus) << std::endl;
std::cout << "Battery Flag: " << static_cast<int>(powerStatus.BatteryFlag) << std::endl;
std::cout << "Battery Life Percent: " << static_cast<int>(powerStatus.BatteryLifePercent) << std::endl;
std::cout << "Battery Life Time: " << powerStatus.BatteryLifeTime << std::endl;
std::cout << "Battery Full Life Time: " << powerStatus.BatteryFullLifeTime << std::endl;
}
else
{
std::cerr << "Failed to get power status." << std::endl;
}
return 0;
}這個(gè)程序使用了 Windows API 函數(shù) GetSystemPowerStatus 來(lái)獲取系統(tǒng)的電源狀態(tài)。如果成功獲取了電源狀態(tài),就會(huì)輸出以下信息:
AC Line Status:表示電源是否連接到電網(wǎng),1 表示已連接,0 表示未連接。
Battery Flag:表示電池的狀態(tài),0 表示沒(méi)有電池,1 表示電池正在使用,2 表示電池在充電,3 表示電池已滿。
Battery Life Percent:表示電池剩余電量百分比,-1 表示無(wú)法獲取。
Battery Life Time:表示電池的剩余使用時(shí)間(單位為秒),-1 表示無(wú)法獲取。
Battery Full Life Time:表示電池的滿電使用時(shí)間(單位為秒),-1 表示無(wú)法獲取。
四、總結(jié)
windows的基礎(chǔ)信息也是計(jì)算機(jī)的資源的一種,我們可以使用微軟提供的api來(lái)完整基礎(chǔ)信息的獲取。在計(jì)算機(jī)程序的發(fā)版中,針對(duì)不同的計(jì)算機(jī)基礎(chǔ)信息我們同樣可以安裝不同的版本或者區(qū)別對(duì)待,已完成對(duì)用戶的助力。
到此這篇關(guān)于C++使用windwos api實(shí)現(xiàn)獲取計(jì)算機(jī)基本信息的文章就介紹到這了,更多相關(guān)C++獲取計(jì)算機(jī)基本信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言對(duì)CSV文件從最后往前一行一行讀取的實(shí)現(xiàn)方法
今天小編就為大家分享一篇關(guān)于C語(yǔ)言對(duì)CSV文件從最后往前一行一行讀取的實(shí)現(xiàn)方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
C++11中std::function基礎(chǔ)用法詳解
std::function是C++11標(biāo)準(zhǔn)庫(kù)中提供的一種可調(diào)用對(duì)象的通用類(lèi)型,它可以存儲(chǔ)任意可調(diào)用對(duì)象,本文就來(lái)和大家講講它的基礎(chǔ)用法,希望對(duì)大家有所幫助2023-04-04
通過(guò)c語(yǔ)言調(diào)用系統(tǒng)curl動(dòng)態(tài)庫(kù)的示例詳解
這篇文章中我們將通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)講解如何在Ubuntu系統(tǒng)中通過(guò)C語(yǔ)言調(diào)用動(dòng)態(tài)庫(kù)(共享庫(kù))的方法,我們將使用libcurl庫(kù),這是一個(gè)基于客戶端的URL傳輸庫(kù),廣泛用于各種程序和應(yīng)用中以訪問(wèn)網(wǎng)頁(yè)和服務(wù)器數(shù)據(jù),需要的朋友可以參考下2024-03-03
OpenCV實(shí)現(xiàn)特征檢測(cè)和特征匹配方法匯總
一幅圖像中總存在著其獨(dú)特的像素點(diǎn),這些點(diǎn)我們可以認(rèn)為就是這幅圖像的特征,成為特征點(diǎn),本文主要介紹了OpenCV實(shí)現(xiàn)特征檢測(cè)和特征匹配方法,感興趣的可以了解一下2021-08-08
C語(yǔ)言編程PAT乙級(jí)學(xué)習(xí)筆記示例分享
這篇文章主要為大家介紹了C語(yǔ)言編程PAT乙級(jí)學(xué)習(xí)筆記實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
實(shí)例解析C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠模式的采用
這篇文章主要介紹了C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠模式的采用實(shí)例,在簡(jiǎn)單工廠模式中程序往往利用封裝繼承來(lái)降低耦合度,需要的朋友可以參考下2016-03-03
C語(yǔ)言鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07

