---------------------------------------------------------------------------
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("\r\n"));
  }
 }
 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\r\n总容量:%I64u Byte\r\n所有可用容量:%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\r\n总容量:%.2Lf GB\r\n所有可用容量:%.2Lf GB"),
   dFreeBytesAvailable, dTotalNumberOfBytes, dTotalNumberOfFreeBytes);
 }
 
 return strInfo;
}
 

vc++基础班[25]---系统信息的获取的更多相关文章

  1. vc++基础班[24]---系统各种路径信息的获取

    vc++基础班[24]---系统各种路径信息的获取 ------------------------------------------ Begin ------------------------- ...

  2. vc++基础班[23]---文件夹的基本操作

      ①.文件夹的创建:CreateDirectory ※※※ 注意:此函数只能创建一层目录,比如想在 C 盘下的 Temp 目录下创建新目录为:123 那么前提是 Temp 这个目录存在才可以!   ...

  3. vc++基础班[22]---文件的基本操作2

      MFC 中的 CFile 及其派生类中没有提供直接进行文件的复制操作,因而要借助于SDK API: SDK中的文件相关函数常用的有CopyFile().CreateDirectory().Dele ...

  4. vc++基础班[27]---实现一个简单的任务管理器

      因为任务管理器中涉及到进程的枚举操作,所以把两节课的知识点合并到一起来讲!   ①.设计界面.以及列表控件变量的绑定: ②.列表控件样式的指定: m_TaskList.SetExtendedSty ...

  5. vc++基础班[28]---动态数组及动态链表的讲解

    C++中也有相应的动态数组.动态链表.映射表的模板类,就是STL中的:vector.list.map 他们属于C++标准中的一部分,对于程序的移植性来说也是不错的,但是在MFC编程中使用 CArray ...

  6. vc++基础班[21]---文件的基本操作之CFile

    ①.文件的创建.打开.关闭: 文件的创建.打开:CFile::Open 文件的关闭:CFile::Close   CFile::modeCreate:以新建方式打开,如果文件不存在,则新建:如果文件已 ...

  7. vc++基础班[26]---进程的相关操作

      ①.ShellExecute 进行进程的创建,属于 shell api: //int iRet = (int)ShellExecute(m_hWnd, _T("open"), ...

  8. Python基础班学习笔记

    本博客采用思维导图式笔记,所有思维导图均为本人亲手所画.因为本人也是初次学习Python语言所以有些知识点可能不太全. 基础班第一天学习笔记:链接 基础班第二天学习笔记:链接 基础班第三天学习笔记:链 ...

  9. 老段带你学鸟哥Linux视频教程 包含基础班+提高班

    老段带你学鸟哥Linux视频教程 包含基础班+提高班,附带pdf文档. 目录结构如下: 目录:/-老段带你学鸟哥Linux视频教程 [.9G] ┣━━老段带你学鸟哥-服务器篇 [1009.4M] ┃ ...

随机推荐

  1. Java Hibernate中的悲观锁和乐观锁的实现

    锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种, ...

  2. oracle里实例和数据库之间的关系

    一个数据库服务器上可以装几个数据库它们都是用sid来标志,例如orcl1,orcl2,orcl3等等,一个数据库如orcl1中可以有多个实例吗? Oracle数据库,实际上应该是说,我们使用的是Ora ...

  3. JAVA核心技术I---JAVA基础知识(Jar文件导入导出)

    一:Jar初识 (一)定义 同c++中的DLL一样 jar文件,一种扩展名为jar的文件,是Java所特有的一种文件格式,用于可执行程序文件的传播. jar文件实际上是一组class文件的压缩包 (二 ...

  4. springboot中通用mapper结合mybatis generator的使用

    通用mapper就是指的是  tk.mybatis  包下的.这个是通用mapper就是说自动生成的dao层需要继承这个框架提供的mapper类.而我们之前用的org.mybatis这个最开始是普通的 ...

  5. Hadoop记录-HDFS balancer配置

    HDFS balancer配置(可通过CM配置)dfs.datanode.balance.max.concurrent.moves 并行移动的block数量,默认5 dfs.datanode.bala ...

  6. 解决mysql:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

    (一)出现问题的的报错信息 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) ( ...

  7. FontAwesome图标选择器

    虽然比较简单,但很实用,在C# MVC下开发,请首先将图标名称保存到数据库中,图标窗口如下. @{ Layout = "~/Views/Shared/_Form.cshtml"; ...

  8. spring注解第01课 @Configuration、@Bean

    一.原始的 xml配置方式 1.Spring pom 依赖 <dependency> <groupId>org.springframework</groupId> ...

  9. 堆栈Stack介绍

    堆栈(Stack)代表了一个后进先出的对象集合.当您需要对各项进行后进先出的访问时,则使用堆栈.当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素. Stack 类的方法和属性 ...

  10. bzoj 3916 暴力哈希

    暴力的哈希,注意: 将一个串当作另一个串的前缀,需要乘上p[len],len=后面串的长度 这是自己的代码,拿数据在本地测A掉了,但是bz上wa了??bz换数据了难道?? #include<cs ...