获取系统CPU和内存信息

#define SALFDELETE(pValue) /
 if(pValue) /
 delete[] pValue; /
 pValue = NULL;

struct  strSysInfo
{
 DWORD    dwCPUNumber;
 wchar_t    *pArchitecture;
 wchar_t    *pProcessLevel;
 wchar_t    *pPrcessVersion;

 DWORD    dwPageSize;
 DWORD    dwAlloc;
 void    *pAppMinAddress;
 void    *pAppMaxAddress;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
 SYSTEM_INFO mySysInfo;
 strSysInfo  sysInfo;
 memset(&sysInfo, 0, sizeof(sysInfo));

 GetSystemInfo(&mySysInfo);

 // CPU 特征
 switch (mySysInfo.wProcessorArchitecture)
 {
 case PROCESSOR_ARCHITECTURE_INTEL:
  {
   wchar_t *pArchitecture = L"Intel ";
   sysInfo.pArchitecture = new wchar_t[wcslen(pArchitecture) + 1];
   wcscpy(sysInfo.pArchitecture, pArchitecture);

   sysInfo.pProcessLevel = new wchar_t[50];
   sysInfo.pPrcessVersion = new wchar_t[50];
   switch (mySysInfo.wProcessorLevel)
   {
   case 3:
   case 4:
    {
     wsprintfW(sysInfo.pProcessLevel, L"80%c86", mySysInfo.wProcessorLevel + '0');
     if (HIBYTE(mySysInfo.wProcessorRevision) == 0xFF)
     {
      wsprintfW(sysInfo.pPrcessVersion,
        L"model number is %d, stepping identifier = %d",
        LOBYTE(mySysInfo.wProcessorRevision) & 0xF0 - 0xA0,
        LOBYTE(mySysInfo.wProcessorRevision) & 0x0F);
     }
     else
     {
      wsprintfW(sysInfo.pPrcessVersion,
          L"stepping letter = %d, minor stepping = %d",
          HIBYTE(mySysInfo.wProcessorRevision) + 'A',
          LOBYTE(mySysInfo.wProcessorRevision)
         );
     }

     break;
    }

   case 5:
    {

     wsprintfW(sysInfo.pProcessLevel, L"Pentium");
     wsprintfW(sysInfo.pPrcessVersion,
         L"model number = %d, stepping = %d",
        HIBYTE(mySysInfo.wProcessorRevision),
        LOBYTE(mySysInfo.wProcessorRevision)
        );
     break;
    }
   case 6:
    {
     wsprintfW(sysInfo.pProcessLevel, L"Pentium Pro, Pentium II or Above");
     wsprintfW(sysInfo.pPrcessVersion,
      L"model number = %d, stepping = %d",
      HIBYTE(mySysInfo.wProcessorRevision),
      LOBYTE(mySysInfo.wProcessorRevision)
      );
     break;
    }

   }

   break;
  }

 case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64:
  {
   wchar_t *pArchitecture = L"intel x64, WIN64 Platform";
   sysInfo.pArchitecture = new wchar_t[wcslen(pArchitecture) + 1];
   wcscpy(sysInfo.pArchitecture, pArchitecture);
  
   break;
  }

 case PROCESSOR_ARCHITECTURE_AMD64:
  {
   wchar_t *pArchitecture = L"AMD x64, WIN64 Platform";
   sysInfo.pArchitecture = new wchar_t[wcslen(pArchitecture) + 1];
   wcscpy(sysInfo.pArchitecture, pArchitecture);
   
   break;
  }

 default:
  {
   wchar_t *pArchitecture = L"Unknown Or early CPU";
   sysInfo.pArchitecture = new wchar_t[wcslen(pArchitecture) + 1];
   wcscpy(sysInfo.pArchitecture, pArchitecture);

   break;
  }
 }
 sysInfo.dwCPUNumber = mySysInfo.dwNumberOfProcessors;

 //内存特征
 sysInfo.dwPageSize = mySysInfo.dwPageSize;
 sysInfo.dwAlloc = mySysInfo.dwAllocationGranularity;
 sysInfo.pAppMinAddress = mySysInfo.lpMinimumApplicationAddress;
 sysInfo.pAppMinAddress = mySysInfo.lpMaximumApplicationAddress;
 
 setlocale(LC_CTYPE, "");
 wprintf(L"本机CPU特征:CPU数量 %d, %s, %s, %s, 内存特征: CPU页面大小%d, 内存分配粒度 %d, 应用程序开始地址 %p, 结束地址 %p /r/n",
   sysInfo.dwCPUNumber, sysInfo.pArchitecture, sysInfo.pProcessLevel,
   sysInfo.pPrcessVersion, sysInfo.dwPageSize, sysInfo.dwAlloc,
   sysInfo.pAppMinAddress, sysInfo.pAppMaxAddress);

 SALFDELETE(sysInfo.pArchitecture);
 SALFDELETE(sysInfo.pPrcessVersion);
 SALFDELETE(sysInfo.pProcessLevel);

 getchar();

 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值