C#获取硬盘编号、CPU编号及类型、内存大小及使用情况

原创 2007年09月25日 11:02:00

如何利用C#获取系统有关环境和属性,这个也是在网上问得比较多的问题,不过大部分只有提问没有回答,最近正好想做有关方面的东西,整理了一下,提供给大家,希望能给大家提供参考意见:

首先需要定义几个结构(struct) ,便于DllImport作为返回参数调用。以下是代码:
CpuInfo.cs

using System;
using System.Configuration;
using System.Runtime.InteropServices;

/**//**
* LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序
* 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
* LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
* LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
*/

/**//// <summary>
/// 定义CPU的信息结构
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct CpuInfo
...{
        /**//// <summary>
        /// OEM ID
        /// </summary>
        public uint dwOemId;
        /**//// <summary>
        /// 页面大小
        /// </summary>
        public uint dwPageSize;
        public uint lpMinimumApplicationAddress;
        public uint lpMaximumApplicationAddress;
        public uint dwActiveProcessorMask;
        /**//// <summary>
        /// CPU个数
        /// </summary>
        public uint dwNumberOfProcessors;
        /**//// <summary>
        /// CPU类型
        /// </summary>
        public uint dwProcessorType;
        public uint dwAllocationGranularity;
        /**//// <summary>
        /// CPU等级
        /// </summary>
        public uint dwProcessorLevel;
        public uint dwProcessorRevision;
}
MemoryInfo.cs
using System;
using System.Configuration;
using System.Runtime.InteropServices;

/**//**
* LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序
* 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
* LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
* LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
*/
/**//// <summary>
/// 定义内存的信息结构
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct MemoryInfo
...{
        /**//// <summary>
        ///
        /// </summary>
        public uint dwLength;
        /**//// <summary>
        /// 已经使用的内存
        /// </summary>
        public uint dwMemoryLoad;
        /**//// <summary>
        /// 总物理内存大小
        /// </summary>
        public uint dwTotalPhys;
        /**//// <summary>
        /// 可用物理内存大小
        /// </summary>
        public uint dwAvailPhys;
        /**//// <summary>
        /// 交换文件总大小
        /// </summary>
        public uint dwTotalPageFile;
        /**//// <summary>
        /// 可用交换文件大小
        /// </summary>
        public uint dwAvailPageFile;
        /**//// <summary>
        /// 总虚拟内存大小
        /// </summary>
        public uint dwTotalVirtual;
        /**//// <summary>
        /// 可用虚拟内存大小
        /// </summary>
        public uint dwAvailVirtual;
}

SystemTimeInfo.cs
using System;
using System.Configuration;
using System.Runtime.InteropServices;

/**//**
* LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序
* 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
* LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
* LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
*/
/**//// <summary>
/// 定义系统时间的信息结构
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct SystemTimeInfo
...{
       /**//// <summary>
       /// 年
       /// </summary>
       public ushort wYear;
       /**//// <summary>
       /// 月
       /// </summary>
       public ushort wMonth;
       /**//// <summary>
       /// 星期
       /// </summary>
       public ushort wDayOfWeek;
       /**//// <summary>
       /// 天
       /// </summary>
       public ushort wDay;
       /**//// <summary>
       /// 小时
       /// </summary>
       public ushort wHour;
       /**//// <summary>
       /// 分钟
       /// </summary>
       public ushort wMinute;
       /**//// <summary>
       /// 秒
       /// </summary>
       public ushort wSecond;
       /**//// <summary>
       /// 毫秒
       /// </summary>
       public ushort wMilliseconds;
}
另外还定义了一个调用类SystemInfo.cs,代码如下:
using System;
using System.Configuration;
using System.Runtime.InteropServices;
using System.Management;
using System.Text;

/**//// <summary>
/// SystemInfo 的摘要说明
/// </summary>
public class SystemInfo
...{
      private const int CHAR_COUNT = 128;
      public SystemInfo()
      ...{
        
      }
      [DllImport("kernel32")]
      private static extern void GetWindowsDirectory(StringBuilder WinDir, int count);

      [DllImport("kernel32")]
      private static extern void GetSystemDirectory(StringBuilder SysDir, int count);

      [DllImport("kernel32")]
      private static extern void GetSystemInfo(ref CpuInfo cpuInfo);

      [DllImport("kernel32")]
      private static extern void GlobalMemoryStatus(ref MemoryInfo memInfo);

      [DllImport("kernel32")]
      private static extern void GetSystemTime(ref SystemTimeInfo sysInfo);

      /**//// <summary>
      /// 查询CPU编号
      /// </summary>
      /// <returns></returns>
      public string GetCpuId()
      ...{
          ManagementClass mClass = new ManagementClass("Win32_Processor");
          ManagementObjectCollection moc = mClass.GetInstances();
          string cpuId=null;
          foreach (ManagementObject mo in moc)
          ...{
              cpuId = mo.Properties["ProcessorId"].Value.ToString();
              break;
          }
          return cpuId;
      }

      /**//// <summary>
      /// 查询硬盘编号
      /// </summary>
      /// <returns></returns>
      public string GetMainHardDiskId()
      ...{
          ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
          String hardDiskID=null;
          foreach (ManagementObject mo in searcher.Get())
          ...{
              hardDiskID = mo["SerialNumber"].ToString().Trim();
              break;
          }
          return hardDiskID;
      }

      /**//// <summary>
      /// 获取Windows目录
      /// </summary>
      /// <returns></returns>
      public string GetWinDirectory()
      ...{
          StringBuilder sBuilder = new StringBuilder(CHAR_COUNT);
          GetWindowsDirectory(sBuilder, CHAR_COUNT);
          return sBuilder.ToString();
      }

      /**//// <summary>
      /// 获取系统目录
      /// </summary>
      /// <returns></returns>
      public string GetSysDirectory()
      ...{
          StringBuilder sBuilder = new StringBuilder(CHAR_COUNT);
          GetSystemDirectory(sBuilder, CHAR_COUNT);
          return sBuilder.ToString();
      }

     /**//// <summary>
     /// 获取CPU信息
     /// </summary>
     /// <returns></returns>
      public CpuInfo GetCpuInfo()
      ...{
          CpuInfo cpuInfo = new CpuInfo();
          GetSystemInfo(ref cpuInfo);
          return cpuInfo;
      }

      /**//// <summary>
      /// 获取系统内存信息
      /// </summary>
      /// <returns></returns>
      public MemoryInfo GetMemoryInfo()
      ...{
          MemoryInfo memoryInfo = new MemoryInfo();
          GlobalMemoryStatus(ref memoryInfo);
          return memoryInfo;
      }

      /**//// <summary>
      /// 获取系统时间信息
      /// </summary>
      /// <returns></returns>
      public SystemTimeInfo GetSystemTimeInfo()
      ...{
          SystemTimeInfo systemTimeInfo = new SystemTimeInfo();
          GetSystemTime(ref systemTimeInfo);
          return systemTimeInfo;
      }

      /**//// <summary>
      /// 获取系统名称
      /// </summary>
      /// <returns></returns>
      public string GetOperationSystemInName()
      ...{
          OperatingSystem os = System.Environment.OSVersion;
          string osName = "UNKNOWN";
          switch (os.Platform)
          ...{
              case PlatformID.Win32Windows:
                  switch (os.Version.Minor)
                  ...{
                      case 0: osName = "Windows 95"; break;
                      case 10: osName = "Windows 98"; break;
                      case 90: osName = "Windows ME"; break;
                  }
                  break;
              case PlatformID.Win32NT:
                  switch (os.Version.Major)
                  ...{
                      case 3: osName = "Windws NT 3.51"; break;
                      case 4: osName = "Windows NT 4"; break;
                      case 5: if (os.Version.Minor == 0)
                          ...{
                              osName = "Windows 2000";
                          }
                          else if (os.Version.Minor == 1)
                          ...{
                              osName = "Windows XP";
                          }
                          else if (os.Version.Minor == 2)
                          ...{
                              osName = "Windows Server 2003";
                          }
                          break;
                      case 6: osName = "Longhorn"; break;
                  }
                  break;
          }
          return String.Format("{0},{1}", osName, os.Version.ToString());
      }
}


以下是调用实例,为了简单,我在一个aspx页面中输出,不过这个程序可以在WinForm中调用:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Specialized;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices;

public partial class Index : System.Web.UI.Page
...{
     protected void Page_Load(object sender, EventArgs e)
     ...{
         if (!Page.IsPostBack)
         ...{
             SystemInfo systemInfo = new SystemInfo();
              Response.Write("操作系统:" + systemInfo.GetOperationSystemInName() + "<br/>");
             Response.Write("CPU编号:"+systemInfo.GetCpuId() + "<br/>");
             Response.Write("硬盘编号:"+systemInfo.GetMainHardDiskId() + "<br/>");
             Response.Write("Windows目录所在位置:" + systemInfo.GetSysDirectory() + "<br/>");
             Response.Write("系统目录所在位置:" + systemInfo.GetWinDirectory() + "<br/>");
             MemoryInfo memoryInfo = systemInfo.GetMemoryInfo();
             CpuInfo cpuInfo = systemInfo.GetCpuInfo();
             Response.Write("dwActiveProcessorMask" + cpuInfo.dwActiveProcessorMask + "<br/>");
             Response.Write("dwAllocationGranularity" + cpuInfo.dwAllocationGranularity + "<br/>");
             Response.Write("CPU个数:" + cpuInfo.dwNumberOfProcessors + "<br/>");
             Response.Write("OEM ID:" + cpuInfo.dwOemId + "<br/>");
             Response.Write("页面大小" + cpuInfo.dwPageSize + "<br/>");
             Response.Write("CPU等级" + cpuInfo.dwProcessorLevel + "<br/>");
             Response.Write("dwProcessorRevision" + cpuInfo.dwProcessorRevision + "<br/>");
             Response.Write("CPU类型" + cpuInfo.dwProcessorType + "<br/>");
             Response.Write("lpMaximumApplicationAddress" + cpuInfo.lpMaximumApplicationAddress + "<br/>");
             Response.Write("lpMinimumApplicationAddress" + cpuInfo.lpMinimumApplicationAddress + "<br/>");
             Response.Write("CPU类型:" + cpuInfo.dwProcessorType + "<br/>");
             Response.Write("可用交换文件大小:" + memoryInfo.dwAvailPageFile + "<br/>");
             Response.Write("可用物理内存大小:" + memoryInfo.dwAvailPhys + "<br/>");
             Response.Write("可用虚拟内存大小" + memoryInfo.dwAvailVirtual + "<br/>");
             Response.Write("操作系统位数:" + memoryInfo.dwLength + "<br/>");
             Response.Write("已经使用内存大小:" + memoryInfo.dwMemoryLoad + "<br/>");
             Response.Write("交换文件总大小:" + memoryInfo.dwTotalPageFile + "<br/>");
             Response.Write("总物理内存大小:" + memoryInfo.dwTotalPhys + "<br/>");
             Response.Write("总虚拟内存大小:" + memoryInfo.dwTotalVirtual + "<br/>");
         }
     }
}
说明:前台aspx页面没有任何控件。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C#获取系统版本、内存大小、显卡类型、cpu型号

http://syxc.iteye.com/blog/728710 using System; using System.Collections.Generic; using Sys...
  • plean
  • plean
  • 2012-06-06 11:41
  • 1245

C/C++获取Windows系统CPU和内存及硬盘使用情况

//1.获取Windows系统内存使用率 #include "windows.h" #include "stdio.h" //windows 内存 使用率 DWORD getMemUsage(){ ...

C/C++获取Windows系统CPU和内存及硬盘使用情况

//1.获取Windows系统内存使用率//windows 内存 使用率 DWORD getWin_MemUsage(){ MEMORYSTATUS ms; ::Globa...

C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)说明

最近学习过程中,想到提取系统硬件信息做一些验证,故而对网上提到的利用.NET System.Management类获取硬件信息做了进一步的学习、验证。验证是分别在4台电脑,XP SP3系统中进行,特将...

C#獲取電腦硬件信息(CPU ID、主板ID、硬盤ID、BIOS編號

http://www.cnblogs.com/djlzxzy/archive/2010/08/26/1809532.html 最近學習過程中,想到提取系統硬件信息做一些驗證,故而對網上提到的利用...

获取网卡MAC、硬盘序列号、CPU ID、BIOS编号

http://topic.csdn.net/u/20081113/17/a10543d9-90d4-49c5-8d6b-a518cdb7bd64.html 获取网卡MAC、硬盘序列号、CPU I...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)