zoukankan      html  css  js  c++  java
  • vc++基础班[25]---系统信息的获取

    ---------------------------------------------------------------------------
    VC 驿站
    WwW.CcTry.CoM
    多抽出一分钟时间来学习,让你的生命更加精彩!
    C、C++、VC++ 各种学习资源,免费教程,期待您的加入!
    动画教程只是起到技术交流的作用,请大家不用利用此方法做非法用途.
    由此动画造成的任何后果和动画作者及本站无关.
    ----------------------------------------------------------------------------------------
    大家好,我是Syc
    今天给大家做的教程是:
    vc++基础班[25]---系统信息的获取
    ------------------------------------------ Begin ----------------------------------------
     
    ①、获取当前登录用户名称:
    函数为:GetUserName,准确的说此函数为获取当前线程关联的用户名称;
     
    ②、获取计算机名称:
    函数为:GetComputerName,当然也可以通过 SetComputerName 函数来进行计算机名称的设置,但必须重新启动系统!
     
    ③、获取CPU的描述信息:
    CString GetCpuDescription()
    {
     CString strCPU;
     HKEY hKey = NULL;
     LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
      _T("Hardware\Description\System\CentralProcessor\0") , 0, KEY_QUERY_VALUE, &hKey);
     if(lRet == ERROR_SUCCESS){
      DWORD dwSize = 0;
      BYTE *pszBuf = NULL;
      lRet = RegQueryValueEx(hKey, _T("ProcessorNameString"), NULL, NULL, NULL, &dwSize);
      if(lRet == ERROR_SUCCESS && dwSize > 0){
       pszBuf = new BYTE[dwSize+1];
       ZeroMemory(pszBuf, dwSize+1);
       RegQueryValueEx(hKey, _T("ProcessorNameString"), NULL, NULL, pszBuf, &dwSize);
      }
      RegCloseKey(hKey);
      strCPU.Format(_T("%s"), pszBuf);
      if (pszBuf) delete [] pszBuf;
     }
     return strCPU;
    }
     
    ④、获取内存信息:
    ULONGLONG GetMemoryInfo()
    {
     ULONGLONG dwMemSpace = 0;
     MEMORYSTATUSEX memStatus = {0};
     memStatus.dwLength = sizeof(MEMORYSTATUSEX);
     GlobalMemoryStatusEx(&memStatus);
     dwMemSpace = (ULONGLONG)(memStatus.ullTotalPhys /1024/1024);
     return dwMemSpace;
    }
     
    ⑤、获取磁盘列表及容量信息:
    计算机存储单位:Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB
    ////////////////////////////////////////////////////////////////////////////////
    CString EnumDrives()
    {
     UINT nCount = 0;
     CString strDrives;
     TCHAR *pBuf = NULL;
     //原则上来说 4*26+1 大小就够用了,每个盘符占用4个字符,也就是:C:\0
     TCHAR szBuf[MAX_PATH] = {0};
     DWORD dwRet = GetLogicalDriveStrings(MAX_PATH, szBuf);
     if (dwRet != 0){
      nCount = dwRet/4;
      pBuf = szBuf;
      for (UINT idx = 0; idx < nCount; ++idx, pBuf += 4){
       strDrives.AppendFormat(_T("%s%s"), pBuf, _T(" "));
      }
     }
     return strDrives;
    }
     
    CString GetDriveTypeString(CString strDrive)
    {
     //传递的参数至少要包含:盘符+ :
     //也可以是目录的路径,但是结尾必须有\符号
     CString strDriveTpye;
     UINT uType = GetDriveType(strDrive);
     switch (uType)
     {
     case DRIVE_UNKNOWN:
      strDriveTpye = _T("类型未知!");
      break;
     case DRIVE_NO_ROOT_DIR:
      strDriveTpye = _T("指定的盘符不存在!");
      break;
     case DRIVE_REMOVABLE:
      strDriveTpye = _T("软盘或U盘");
      break;
     case DRIVE_FIXED:
      strDriveTpye = _T("本地硬盘或移动硬盘");
      break;
     case DRIVE_REMOTE:
      strDriveTpye = _T("网络磁盘");
      break;
     case DRIVE_CDROM:
      strDriveTpye = _T("CD-ROM");
      break;
     case DRIVE_RAMDISK:
      strDriveTpye = _T("RAM 磁盘");
      break;
     default:
      break;
     }
     return strDriveTpye;
    }
     
    CString GetDriveSpaceInfo(CString strDrive)
    {
     CString strInfo;
     ULARGE_INTEGER nFreeBytesAvailable = {0};
     ULARGE_INTEGER nTotalNumberOfBytes = {0};
     ULARGE_INTEGER nTotalNumberOfFreeBytes = {0};
     
     if (GetDiskFreeSpaceEx(strDrive, &nFreeBytesAvailable, &nTotalNumberOfBytes, &nTotalNumberOfFreeBytes)) {
      //单位是字节
      //strInfo.Format(_T("可用容量:%I64u Byte 总容量:%I64u Byte 所有可用容量:%I64u Byte"),
      // nFreeBytesAvailable.QuadPart, nTotalNumberOfBytes.QuadPart, nTotalNumberOfFreeBytes.QuadPart);
     
      //单位是GB
      long double dFreeBytesAvailable = ((long double)(nFreeBytesAvailable.QuadPart))/(1024*1024*1024);
      long double dTotalNumberOfBytes = ((long double)(nTotalNumberOfBytes.QuadPart))/(1024*1024*1024);
      long double dTotalNumberOfFreeBytes = ((long double)(nTotalNumberOfFreeBytes.QuadPart))/(1024*1024*1024);
     
      strInfo.Format(_T("可用容量:%.2Lf GB 总容量:%.2Lf GB 所有可用容量:%.2Lf GB"),
       dFreeBytesAvailable, dTotalNumberOfBytes, dTotalNumberOfFreeBytes);
     }
     
     return strInfo;
    }
     
  • 相关阅读:
    C++中几个值得分析的小问题(1)
    《Effective C++》第5章 实现-读书笔记
    《Effective C++》第4章 设计与声明(2)-读书笔记
    《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(2)-读书笔记
    《Effective C++》第4章 设计与声明(1)-读书笔记
    《Effective C++》第3章 资源管理(2)-读书笔记
    【剑指Offer】24二叉树中和为某一值的路径
    【剑指Offer】23二叉搜索树的后序遍历序列
    【剑指Offer】22从上往下打印二叉树
    【剑指Offer】21栈的压入、弹出序列
  • 原文地址:https://www.cnblogs.com/liaocheng/p/4243356.html
Copyright © 2011-2022 走看看