VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 289|回复: 1

VC++基础班-[25]系统信息的获取

[复制链接]
01_avatar_middle
online_admins admin 发表于 2018-2-3 23:19:08 | 显示全部楼层 |阅读模式
------------------------------------------ Begin ----------------------------------------
①、获取当前登录用户名称:
函数为:GetUserName,准确的说此函数为获取当前线程关联的用户名称;

②、获取计算机名称:
函数为:GetComputerName,当然也可以通过 SetComputerName 函数来进行计算机名称的设置,但必须重新启动系统!

③、获取CPU的描述信息:
  1. CString GetCpuDescription()
  2. {
  3.         CString strCPU;
  4.         HKEY hKey = NULL;
  5.         LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
  6.                 _T("Hardware\\Description\\System\\CentralProcessor\\0") , 0, KEY_QUERY_VALUE, &hKey);
  7.         if(lRet == ERROR_SUCCESS){
  8.                 DWORD dwSize = 0;
  9.                 BYTE *pszBuf = NULL;
  10.                 lRet = RegQueryValueEx(hKey, _T("ProcessorNameString"), NULL, NULL, NULL, &dwSize);
  11.                 if(lRet == ERROR_SUCCESS && dwSize > 0){
  12.                         pszBuf = new BYTE[dwSize+1];
  13.                         ZeroMemory(pszBuf, dwSize+1);
  14.                         RegQueryValueEx(hKey, _T("ProcessorNameString"), NULL, NULL, pszBuf, &dwSize);
  15.                 }
  16.                 RegCloseKey(hKey);
  17.                 strCPU.Format(_T("%s"), pszBuf);
  18.                 if (pszBuf) delete [] pszBuf;
  19.         }
  20.         return strCPU;
  21. }
复制代码


④、获取内存信息:
  1. ULONGLONG GetMemoryInfo()
  2. {
  3.         ULONGLONG dwMemSpace = 0;
  4.         MEMORYSTATUSEX memStatus = {0};
  5.         memStatus.dwLength = sizeof(MEMORYSTATUSEX);
  6.         GlobalMemoryStatusEx(&memStatus);
  7.         dwMemSpace = (ULONGLONG)(memStatus.ullTotalPhys /1024/1024);
  8.         return dwMemSpace;
  9. }
复制代码


⑤、获取磁盘列表及容量信息:
计算机存储单位:Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB
////////////////////////////////////////////////////////////////////////////////
  1. CString EnumDrives()
  2. {
  3.         UINT nCount = 0;
  4.         CString strDrives;
  5.         TCHAR *pBuf = NULL;
  6.         //原则上来说 4*26+1 大小就够用了,每个盘符占用4个字符,也就是:C:\\0
  7.         TCHAR szBuf[MAX_PATH] = {0};
  8.         DWORD dwRet = GetLogicalDriveStrings(MAX_PATH, szBuf);
  9.         if (dwRet != 0){
  10.                 nCount = dwRet/4;
  11.                 pBuf = szBuf;
  12.                 for (UINT idx = 0; idx < nCount; ++idx, pBuf += 4){
  13.                         strDrives.AppendFormat(_T("%s%s"), pBuf, _T("\r\n"));
  14.                 }
  15.         }
  16.         return strDrives;
  17. }
复制代码

  1. CString GetDriveTypeString(CString strDrive)
  2. {
  3.         //传递的参数至少要包含:盘符+ :
  4.         //也可以是目录的路径,但是结尾必须有\\符号
  5.         CString strDriveTpye;
  6.         UINT uType = GetDriveType(strDrive);
  7.         switch (uType)
  8.         {
  9.         case DRIVE_UNKNOWN:
  10.                 strDriveTpye = _T("类型未知!");
  11.                 break;
  12.         case DRIVE_NO_ROOT_DIR:
  13.                 strDriveTpye = _T("指定的盘符不存在!");
  14.                 break;
  15.         case DRIVE_REMOVABLE:
  16.                 strDriveTpye = _T("软盘或U盘");
  17.                 break;
  18.         case DRIVE_FIXED:
  19.                 strDriveTpye = _T("本地硬盘或移动硬盘");
  20.                 break;
  21.         case DRIVE_REMOTE:
  22.                 strDriveTpye = _T("网络磁盘");
  23.                 break;
  24.         case DRIVE_CDROM:
  25.                 strDriveTpye = _T("CD-ROM");
  26.                 break;
  27.         case DRIVE_RAMDISK:
  28.                 strDriveTpye = _T("RAM 磁盘");
  29.                 break;
  30.         default:
  31.                 break;
  32.         }
  33.         return strDriveTpye;
  34. }
复制代码

  1. CString GetDriveSpaceInfo(CString strDrive)
  2. {
  3.         CString strInfo;
  4.         ULARGE_INTEGER nFreeBytesAvailable = {0};
  5.         ULARGE_INTEGER nTotalNumberOfBytes = {0};
  6.         ULARGE_INTEGER nTotalNumberOfFreeBytes = {0};

  7.         if (GetDiskFreeSpaceEx(strDrive, &nFreeBytesAvailable, &nTotalNumberOfBytes, &nTotalNumberOfFreeBytes)) {
  8.                 //单位是字节
  9.                 //strInfo.Format(_T("可用容量:%I64u Byte\r\n总容量:%I64u Byte\r\n所有可用容量:%I64u Byte"),
  10.                 //        nFreeBytesAvailable.QuadPart, nTotalNumberOfBytes.QuadPart, nTotalNumberOfFreeBytes.QuadPart);

  11.                 //单位是GB
  12.                 long double dFreeBytesAvailable = ((long double)(nFreeBytesAvailable.QuadPart))/(1024*1024*1024);
  13.                 long double dTotalNumberOfBytes = ((long double)(nTotalNumberOfBytes.QuadPart))/(1024*1024*1024);
  14.                 long double dTotalNumberOfFreeBytes = ((long double)(nTotalNumberOfFreeBytes.QuadPart))/(1024*1024*1024);

  15.                 strInfo.Format(_T("可用容量:%.2Lf GB\r\n总容量:%.2Lf GB\r\n所有可用容量:%.2Lf GB"),
  16.                         dFreeBytesAvailable, dTotalNumberOfBytes, dTotalNumberOfFreeBytes);
  17.         }

  18.         return strInfo;
  19. }
复制代码


★ 给大家留个作业,使用 GetLogicalDrives 函数来获取系统内的所有盘符!
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
教程介绍及详情请见:http://www.cctry.com/thread-17282-1-1.html
VC驿站Vip会员详情请见:http://www.cctry.com/static/vip/index.html





上一篇:VC++基础班-[24]系统各种路径信息的获取
下一篇:VC++基础班-[26]进程的相关操作

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-10-20 17:45

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表