获取硬件信息
- 调用WindowsAPI实现获取硬件信息
获取物理内存大小
-
这里只解析了物理内存大小,其余内存信息可以按需要提取
-
对物理内存大小做了向上的取整
-
默认返回的内存大小为Byte,这里转换为了GB
#define GB (1024*1024*1024) MEMORYSTATUSEX statusex; statusex.dwLength = sizeof(statusex); GlobalMemoryStatusEx(&statusex); int nPhysicalMemorySize = ceil(statusex.ullTotalPhys*1.0 / GB);
获取有线网卡和无线网卡基本信息
-
这里只解析了IP地址和MAC地址信息,其余信息可以按需提取
-
根据适配器类型判断是有线网卡还是无线网卡,其余类型没有判断
-
这里假设每个网卡只有一个IP地址
-
手动释堆内存,不然会有内存泄漏
-
stuAdaptersInfo是自定义的结构体,可以按照自己的需要重新定义,这里就不提供定义了
//PIP_ADAPTER_INFO结构体存储本机网卡信息,包括本地网卡、无线网卡和虚拟网卡 PIP_ADAPTER_INFO pAdapterInfo=(IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO)); ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO); //调用GetAdaptersInfo函数,填充pAdapterInfo指针变量,其中ulOutBufLen参数既是输入也是输出 if(GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) { //如果分配失败,释放后重新分配 GlobalFree (pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen); } if(GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == NO_ERROR) { while (pAdapterInfo) { char * ipAddress=pAdapterInfo->IpAddressList.IpAddress.String; QString strIPAddress(ipAddress); QString strMACAddress; strMACAddress.sprintf("%2X-%2X-%2X-%2X-%2X-%2X", pAdapterInfo->Address[0],pAdapterInfo->Address[1], pAdapterInfo->Address[2],pAdapterInfo->Address[3], pAdapterInfo->Address[4],pAdapterInfo->Address[5]); //pAdapter->Type是MIB_IF_TYPE_ETHERNET为本地网卡,pAdapter->Type是71为无线网卡 //这里假设每个网卡只有一个IP if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) { //stuAdaptersInfo.stuEthernetCardInfo.strIPAddress = strIPAddress; //stuAdaptersInfo.stuEthernetCardInfo.strMACAddress = strMACAddress; } else if(pAdapterInfo->Type == 71) { //stuAdaptersInfo.stuWirelessCardInfo.strIPAddress = strIPAddress; //stuAdaptersInfo.stuWirelessCardInfo.strMACAddress = strMACAddress; } PIP_ADAPTER_INFO tmpAdapterInfo = pAdapterInfo; pAdapterInfo = pAdapterInfo->Next; delete tmpAdapterInfo; tmpAdapterInfo = NULL; } }