用C#获取CPU编号、硬盘编号等系统有关环境、属性

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

首先需要定义几个结构(struct) ,便于DllImport作为返回参数调用。以下是代码:
CpuInfo.cs
InBlock.gif using System; 
InBlock.gif using System.Configuration; 
InBlock.gif using System.Runtime.InteropServices; 
InBlock.gif 
InBlock.gif /**//** 
InBlock.gif * LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序 
InBlock.gif * 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。 
InBlock.gif * LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序 
InBlock.gif * LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。 
InBlock.gif */
 
InBlock.gif    
InBlock.gif/** <summary> 
/// 定义CPU的信息结构 
/// </summary> 
InBlock.gif[StructLayout(LayoutKind.Sequential)]    
InBlock.gif public  struct CpuInfo 
InBlock.gif...{ 
InBlock.gif        /** <summary> 
InBlock.gif         /// OEM ID 
InBlock.gif         /// </summary> 
InBlock.gif         public  uint dwOemId; 
InBlock.gif        /** <summary> 
InBlock.gif         /// 页面大小 
InBlock.gif         /// </summary> 
InBlock.gif         public  uint dwPageSize; 
InBlock.gif         public  uint lpMinimumApplicationAddress; 
InBlock.gif         public  uint lpMaximumApplicationAddress; 
InBlock.gif         public  uint dwActiveProcessorMask; 
InBlock.gif        /** <summary> 
InBlock.gif         /// CPU个数 
InBlock.gif         /// </summary> 
InBlock.gif         public  uint dwNumberOfProcessors; 
InBlock.gif        /** <summary> 
InBlock.gif         /// CPU类型 
InBlock.gif         /// </summary> 
InBlock.gif         public  uint dwProcessorType; 
InBlock.gif         public  uint dwAllocationGranularity; 
InBlock.gif        /** <summary> 
InBlock.gif         /// CPU等级 
InBlock.gif         /// </summary> 
InBlock.gif         public  uint dwProcessorLevel; 
InBlock.gif         public  uint dwProcessorRevision;    
InBlock.gif}


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


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


另外还定义了一个调用类SystemInfo.cs,代码如下:
InBlock.gif using System; 
InBlock.gif using System.Configuration; 
InBlock.gif using System.Runtime.InteropServices; 
InBlock.gif using System.Management; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif/** <summary> 
/// SystemInfo 的摘要说明 
/// </summary> 
InBlock.gif public  class SystemInfo 
InBlock.gif...{ 
InBlock.gif         private  const  int CHAR_COUNT = 128; 
InBlock.gif         public SystemInfo() 
InBlock.gif        ...{ 
InBlock.gif                 
InBlock.gif        } 
InBlock.gif        [DllImport( "kernel32")] 
InBlock.gif         private  static  extern  void GetWindowsDirectory(StringBuilder WinDir,  int count); 
InBlock.gif 
InBlock.gif        [DllImport( "kernel32")] 
InBlock.gif         private  static  extern  void GetSystemDirectory(StringBuilder SysDir,  int count); 
InBlock.gif 
InBlock.gif        [DllImport( "kernel32")] 
InBlock.gif         private  static  extern  void GetSystemInfo( ref CpuInfo cpuInfo); 
InBlock.gif 
InBlock.gif        [DllImport( "kernel32")] 
InBlock.gif         private  static  extern  void GlobalMemoryStatus( ref MemoryInfo memInfo); 
InBlock.gif 
InBlock.gif        [DllImport( "kernel32")] 
InBlock.gif         private  static  extern  void GetSystemTime( ref SystemTimeInfo sysInfo); 
InBlock.gif 
InBlock.gif        /** <summary> 
InBlock.gif         /// 查询CPU编号 
InBlock.gif         /// </summary> 
InBlock.gif         /// <returns></returns> 
InBlock.gif         public  string GetCpuId() 
InBlock.gif        ...{ 
InBlock.gif                ManagementClass mClass =  new ManagementClass( "Win32_Processor"); 
InBlock.gif                ManagementObjectCollection moc = mClass.GetInstances(); 
InBlock.gif                 string cpuId= null
InBlock.gif                 foreach (ManagementObject mo  in moc) 
InBlock.gif                ...{ 
InBlock.gif                        cpuId = mo.Properties[ "ProcessorId"].Value.ToString(); 
InBlock.gif                         break
InBlock.gif                } 
InBlock.gif                 return cpuId; 
InBlock.gif        } 
InBlock.gif 
InBlock.gif        /** <summary> 
InBlock.gif         /// 查询硬盘编号 
InBlock.gif         /// </summary> 
InBlock.gif         /// <returns></returns> 
InBlock.gif         public  string GetMainHardDiskId() 
InBlock.gif        ...{ 
InBlock.gif                ManagementObjectSearcher searcher =  new ManagementObjectSearcher( "SELECT * FROM Win32_PhysicalMedia"); 
InBlock.gif                String hardDiskID= null
InBlock.gif                 foreach (ManagementObject mo  in searcher.Get()) 
InBlock.gif                ...{ 
InBlock.gif                        hardDiskID = mo[ "SerialNumber"].ToString().Trim(); 
InBlock.gif                         break
InBlock.gif                } 
InBlock.gif                 return hardDiskID;    
InBlock.gif        } 
InBlock.gif 
InBlock.gif        /** <summary> 
InBlock.gif         /// 获取Windows目录 
InBlock.gif         /// </summary> 
InBlock.gif         /// <returns></returns> 
InBlock.gif         public  string GetWinDirectory() 
InBlock.gif        ...{ 
InBlock.gif                StringBuilder sBuilder =  new StringBuilder(CHAR_COUNT); 
InBlock.gif                GetWindowsDirectory(sBuilder, CHAR_COUNT); 
InBlock.gif                 return sBuilder.ToString(); 
InBlock.gif        } 
InBlock.gif 
InBlock.gif        /** <summary> 
InBlock.gif         /// 获取系统目录 
InBlock.gif         /// </summary> 
InBlock.gif         /// <returns></returns> 
InBlock.gif         public  string GetSysDirectory() 
InBlock.gif        ...{ 
InBlock.gif                StringBuilder sBuilder =  new StringBuilder(CHAR_COUNT); 
InBlock.gif                GetSystemDirectory(sBuilder, CHAR_COUNT); 
InBlock.gif                 return sBuilder.ToString(); 
InBlock.gif        } 
InBlock.gif 
InBlock.gif     /** <summary> 
InBlock.gif      /// 获取CPU信息 
InBlock.gif      /// </summary> 
InBlock.gif      /// <returns></returns> 
InBlock.gif         public CpuInfo GetCpuInfo() 
InBlock.gif        ...{ 
InBlock.gif                CpuInfo cpuInfo =  new CpuInfo(); 
InBlock.gif                GetSystemInfo( ref cpuInfo); 
InBlock.gif                 return cpuInfo; 
InBlock.gif        } 
InBlock.gif 
InBlock.gif        /** <summary> 
InBlock.gif         /// 获取系统内存信息 
InBlock.gif         /// </summary> 
InBlock.gif         /// <returns></returns> 
InBlock.gif         public MemoryInfo GetMemoryInfo() 
InBlock.gif        ...{ 
InBlock.gif                MemoryInfo memoryInfo =  new MemoryInfo(); 
InBlock.gif                GlobalMemoryStatus( ref memoryInfo); 
InBlock.gif                 return memoryInfo; 
InBlock.gif        } 
InBlock.gif 
InBlock.gif        /** <summary> 
InBlock.gif         /// 获取系统时间信息 
InBlock.gif         /// </summary> 
InBlock.gif         /// <returns></returns> 
InBlock.gif         public SystemTimeInfo GetSystemTimeInfo() 
InBlock.gif        ...{ 
InBlock.gif                SystemTimeInfo systemTimeInfo =  new SystemTimeInfo(); 
InBlock.gif                GetSystemTime( ref systemTimeInfo); 
InBlock.gif                 return systemTimeInfo; 
InBlock.gif        } 
InBlock.gif 
InBlock.gif        /** <summary> 
InBlock.gif         /// 获取系统名称 
InBlock.gif         /// </summary> 
InBlock.gif         /// <returns></returns> 
InBlock.gif         public  string GetOperationSystemInName() 
InBlock.gif        ...{ 
InBlock.gif                OperatingSystem os = System.Environment.OSVersion; 
InBlock.gif                 string osName =  "UNKNOWN"
InBlock.gif                 switch (os.Platform) 
InBlock.gif                ...{ 
InBlock.gif                         case PlatformID.Win32Windows: 
InBlock.gif                                 switch (os.Version.Minor) 
InBlock.gif                                ...{ 
InBlock.gif                                         case 0: osName =  "Windows 95"break
InBlock.gif                                         case 10: osName =  "Windows 98"break
InBlock.gif                                         case 90: osName =  "Windows ME"break
InBlock.gif                                } 
InBlock.gif                                 break
InBlock.gif                         case PlatformID.Win32NT: 
InBlock.gif                                 switch (os.Version.Major) 
InBlock.gif                                ...{ 
InBlock.gif                                         case 3: osName =  "Windws NT 3.51"break
InBlock.gif                                         case 4: osName =  "Windows NT 4"break
InBlock.gif                                         case 5:  if (os.Version.Minor == 0) 
InBlock.gif                                                ...{ 
InBlock.gif                                                        osName =  "Windows 2000";    
InBlock.gif                                                } 
InBlock.gif                                                 else  if (os.Version.Minor == 1) 
InBlock.gif                                                ...{ 
InBlock.gif                                                        osName =  "Windows XP";    
InBlock.gif                                                } 
InBlock.gif                                                 else  if (os.Version.Minor == 2) 
InBlock.gif                                                ...{ 
InBlock.gif                                                        osName =  "Windows Server 2003";    
InBlock.gif                                                } 
InBlock.gif                                                 break
InBlock.gif                                         case 6: osName =  "Longhorn"break
InBlock.gif                                } 
InBlock.gif                                 break
InBlock.gif                } 
InBlock.gif                 return String.Format( "{0},{1}", osName, os.Version.ToString()); 
InBlock.gif        } 
InBlock.gif}


以下是调用实例,为了简单,我在一个aspx页面中输出,不过这个程序可以在WinForm中调用:
InBlock.gif using System; 
InBlock.gif using System.Data; 
InBlock.gif using System.Configuration; 
InBlock.gif using System.Collections; 
InBlock.gif using System.Collections.Specialized; 
InBlock.gif using System.Web; 
InBlock.gif using System.Web.Security; 
InBlock.gif using System.Web.UI; 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI.WebControls.WebParts; 
InBlock.gif using System.Web.UI.HtmlControls; 
InBlock.gif using System.Runtime.InteropServices; 
InBlock.gif 
InBlock.gif public partial  class Index : System.Web.UI.Page 
InBlock.gif...{ 
InBlock.gif         protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif        ...{ 
InBlock.gif                 if (!Page.IsPostBack) 
InBlock.gif                ...{ 
InBlock.gif                        SystemInfo systemInfo =  new SystemInfo(); 
InBlock.gif                         Response.Write( "操作系统:" + systemInfo.GetOperationSystemInName() +  "<br>"); 
InBlock.gif                        Response.Write( "CPU编号:"+systemInfo.GetCpuId() +  "<br>"); 
InBlock.gif                        Response.Write( "硬盘编号:"+systemInfo.GetMainHardDiskId() +  "<br>"); 
InBlock.gif                        Response.Write( "Windows目录所在位置:" + systemInfo.GetSysDirectory() +  "<br>"); 
InBlock.gif                        Response.Write( "系统目录所在位置:" + systemInfo.GetWinDirectory() +  "<br>"); 
InBlock.gif                        MemoryInfo memoryInfo = systemInfo.GetMemoryInfo(); 
InBlock.gif                        CpuInfo cpuInfo = systemInfo.GetCpuInfo(); 
InBlock.gif                        Response.Write( "dwActiveProcessorMask" + cpuInfo.dwActiveProcessorMask +  "<br>"); 
InBlock.gif                        Response.Write( "dwAllocationGranularity" + cpuInfo.dwAllocationGranularity +  "<br>"); 
InBlock.gif                        Response.Write( "CPU个数:" + cpuInfo.dwNumberOfProcessors +  "<br>"); 
InBlock.gif                        Response.Write( "OEM ID:" + cpuInfo.dwOemId +  "<br>"); 
InBlock.gif                        Response.Write( "页面大小" + cpuInfo.dwPageSize +  "<br>"); 
InBlock.gif                        Response.Write( "CPU等级" + cpuInfo.dwProcessorLevel +  "<br>"); 
InBlock.gif                        Response.Write( "dwProcessorRevision" + cpuInfo.dwProcessorRevision +  "<br>"); 
InBlock.gif                        Response.Write( "CPU类型" + cpuInfo.dwProcessorType +  "<br>"); 
InBlock.gif                        Response.Write( "lpMaximumApplicationAddress" + cpuInfo.lpMaximumApplicationAddress +  "<br>"); 
InBlock.gif                        Response.Write( "lpMinimumApplicationAddress" + cpuInfo.lpMinimumApplicationAddress +  "<br>"); 
InBlock.gif                        Response.Write( "CPU类型:" + cpuInfo.dwProcessorType +  "<br>"); 
InBlock.gif                        Response.Write( "可用交换文件大小:" + memoryInfo.dwAvailPageFile +  "<br>"); 
InBlock.gif                        Response.Write( "可用物理内存大小:" + memoryInfo.dwAvailPhys +  "<br>"); 
InBlock.gif                        Response.Write( "可用虚拟内存大小" + memoryInfo.dwAvailVirtual +  "<br>"); 
InBlock.gif                        Response.Write( "操作系统位数:" + memoryInfo.dwLength +  "<br>"); 
InBlock.gif                        Response.Write( "已经使用内存大小:" + memoryInfo.dwMemoryLoad +  "<br>"); 
InBlock.gif                        Response.Write( "交换文件总大小:" + memoryInfo.dwTotalPageFile +  "<br>"); 
InBlock.gif                        Response.Write( "总物理内存大小:" + memoryInfo.dwTotalPhys +  "<br>"); 
InBlock.gif                        Response.Write( "总虚拟内存大小:" + memoryInfo.dwTotalVirtual +  "<br>"); 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif

说明:前台aspx页面没有任何控件。

















本文转自周金桥51CTO博客,原文链接: http://blog.51cto.com/zhoufoxcn/167082 ,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值