. NET 技术讨论

学于明志,交流增加见识,讨论改变思维
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.NET中获取系统硬件信息

Posted on 2006-11-26 22:46    阅读(713)  评论(1编辑  收藏  举报
与原始的 WMI 相比,使用 .NET Framework 中的 WMI 编写客户端应用程序或提供程序具有多种优势,特别是对于使用 C#(而不是 C++)的开发人员。在这种情况下,编写提供程序意味着为在托管代码中编写的应用程序添加规范。

在编写客户端应用程序和提供程序时,.NET Framework 中的 WMI 具有下列优势:

  • 利用公共语言运行库功能,例如垃圾回收、自定义索引器和字典。

    此外,还提供其他公共语言运行库功能,例如自动内存管理、有效部署、面向对象的框架、基于证据的安全性以及异常处理。

  • 类定义和实例发布与 .NET Framework 类一起规范化应用程序,以便应用程序可以为 WMI 提供数据。

    System.Management.Instrumentation 中的类使您能够注册新提供程序、创建新类和发布实例,而不必使用托管对象格式 (MOF) 代码。

  • 使用简单。

    原始 WMI 的 C++ 应用程序有时很难开发,或开发时间很长。System.Management 的类结构为在 .NET Framework 中开发的应用程序带来更多类似脚本的简单性。可以更快地开发应用程序和提供程序,并且更容易调试。

  • 可以访问所有 WMI 数据。

    与原始 WMI 相比,客户端应用程序可以对 WMI 数据进行相同的访问,并且可以执行所有相同的操作。提供程序规范化的应用程序限制性会更强一些。有关更多信息,请参见.NET Framework 中的 WMI 局限性

 

下面例子是使用.NET的WMI实现对系统硬件信息进行获取的代码

using System; 
using System.Management; 
namespace Soyee.Comm 

    
/// <summary> 
    
/// 计算机信息类
    
/// </summary> 
    public class Computer 
    { 
        
public string CpuID; 
        
public string MacAddress; 
        
public string DiskID; 
        
public string IpAddress; 
        
public string LoginUserName; 
        
public string ComputerName; 
        
public string SystemType; 
        
public string TotalPhysicalMemory; //单位:M 
        private static Computer _instance; 
        
public static Computer Instance() 
        { 
            
if (_instance == null
                _instance 
= new Computer(); 
            
return _instance; 
        } 
        
public  Computer() 
        { 
            CpuID 
= GetCpuID(); 
            MacAddress 
= GetMacAddress(); 
            DiskID 
= GetDiskID(); 
            IpAddress 
= GetIPAddress(); 
            LoginUserName 
= GetUserName(); 
            SystemType 
= GetSystemType(); 
            TotalPhysicalMemory 
= GetTotalPhysicalMemory(); 
            ComputerName 
= GetComputerName(); 
        } 
        
string GetCpuID() 
        { 
            
try 
            { 
                
//获取CPU序列号代码 
                string cpuInfo = "";//cpu序列号 
                ManagementClass mc = new ManagementClass("Win32_Processor"); 
                ManagementObjectCollection moc 
= mc.GetInstances(); 
                
foreach (ManagementObject mo in moc) 
                { 
                    cpuInfo 
= mo.Properties["ProcessorId"].Value.ToString(); 
                } 
                moc 
= null
                mc 
= null
                
return cpuInfo; 
            } 
            
catch 
            { 
                
return "unknow"
            } 
            
finally 
            { 
            } 

        } 
        
string GetMacAddress() 
        { 
            
try 
            { 
                
//获取网卡硬件地址 
                string mac = ""
                ManagementClass mc 
= new ManagementClass("Win32_NetworkAdapterConfiguration"); 
                ManagementObjectCollection moc 
= mc.GetInstances(); 
                
foreach (ManagementObject mo in moc) 
                { 
                    
if ((bool)mo["IPEnabled"== true
                    { 
                        mac 
= mo["MacAddress"].ToString(); 
                        
break
                    } 
                } 
                moc 
= null
                mc 
= null
                
return mac; 
            } 
            
catch 
            { 
                
return "unknow"
            } 
            
finally 
            { 
            } 

        } 
        
string GetIPAddress() 
        { 
            
try 
            { 
                
//获取IP地址 
                string st = ""
                ManagementClass mc 
= new ManagementClass("Win32_NetworkAdapterConfiguration"); 
                ManagementObjectCollection moc 
= mc.GetInstances(); 
                
foreach (ManagementObject mo in moc) 
                { 
                    
if ((bool)mo["IPEnabled"== true
                    { 
                        
//st=mo["IpAddress"].ToString(); 
                        System.Array ar; 
                        ar 
= (System.Array)(mo.Properties["IpAddress"].Value); 
                        st 
= ar.GetValue(0).ToString(); 
                        
break
                    } 
                } 
                moc 
= null
                mc 
= null
                
return st; 
            } 
            
catch 
            { 
                
return "unknow"
            } 
            
finally 
            { 
            } 

        } 

        
string GetDiskID() 
        { 
            
try 
            { 
                
//获取硬盘ID 
                String HDid = ""
                ManagementClass mc 
= new ManagementClass("Win32_DiskDrive"); 
                ManagementObjectCollection moc 
= mc.GetInstances(); 
                
foreach (ManagementObject mo in moc) 
                { 
                    HDid 
= (string)mo.Properties["Model"].Value; 
                } 
                moc 
= null
                mc 
= null
                
return HDid; 
            } 
            
catch 
            { 
                
return "unknow"
            } 
            
finally 
            { 
            } 

        } 

        
/// <summary> 
        
/// 操作系统的登录用户名 
        
/// </summary> 
        
/// <returns></returns> 
        string GetUserName() 
        { 
            
try 
            { 
                
string st = ""
                ManagementClass mc 
= new ManagementClass("Win32_ComputerSystem"); 
                ManagementObjectCollection moc 
= mc.GetInstances(); 
                
foreach (ManagementObject mo in moc) 
                { 

                    st 
= mo["UserName"].ToString(); 

                } 
                moc 
= null
                mc 
= null
                
return st; 
            } 
            
catch 
            { 
                
return "unknow"
            } 
            
finally 
            { 
            } 

        } 


        
/// <summary> 
        
/// PC类型 
        
/// </summary> 
        
/// <returns></returns> 
        string GetSystemType() 
        { 
            
try 
            { 
                
string st = ""
                ManagementClass mc 
= new ManagementClass("Win32_ComputerSystem"); 
                ManagementObjectCollection moc 
= mc.GetInstances(); 
                
foreach (ManagementObject mo in moc) 
                { 

                    st 
= mo["SystemType"].ToString(); 

                } 
                moc 
= null
                mc 
= null
                
return st; 
            } 
            
catch 
            { 
                
return "unknow"
            } 
            
finally 
            { 
            } 

        } 

        
/// <summary> 
        
/// 物理内存 
        
/// </summary> 
        
/// <returns></returns> 
        string GetTotalPhysicalMemory() 
        { 
            
try 
            { 

                
string st = ""
                ManagementClass mc 
= new ManagementClass("Win32_ComputerSystem"); 
                ManagementObjectCollection moc 
= mc.GetInstances(); 
                
foreach (ManagementObject mo in moc) 
                { 

                    st 
= mo["TotalPhysicalMemory"].ToString(); 

                } 
                moc 
= null
                mc 
= null
                
return st; 
            } 
            
catch 
            { 
                
return "unknow"
            } 
            
finally 
            { 
            } 
        } 
        
/// <summary> 
        
///  获取计算机名称
        
/// </summary> 
        
/// <returns></returns> 
        string GetComputerName() 
        { 
            
try 
            { 
                
return System.Environment.GetEnvironmentVariable("ComputerName"); 
            } 
            
catch 
            { 
                
return "unknow"
            } 
            
finally 
            { 
            } 
        } 
    } 
}

 本机测试效果:
LEMONGTREE
BFEBFBFF00000F41
ST380011A
192.168.0.122
LEMONGTREE\Administrator
00:16:76:50:B4:C3
X86-based PC
1071599616

按照这个例子举一反三就能获取系统所有硬件信息,这例子只是个简单的应用,希望大家能开发出更好的应用。