天天看点

获取硬件信息获取硬件信息

获取硬件信息

  • 调用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;
      	}
      }
               

继续阅读