.NET中获取系统硬件信息

与原始的 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 

    
///    
    
///  计算机信息类
    
///  
 
     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  
            { 
            } 

        } 

        
///    
        
///  操作系统的登录用户名 
        
///  
 
        
///    
         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  
            { 
            } 

        } 


        
///    
        
///  PC类型 
        
///  
 
        
///    
         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  
            { 
            } 

        } 

        
///    
        
///  物理内存 
        
///  
 
        
///    
         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  
            { 
            } 
        } 
        
///    
        
///   获取计算机名称
        
///  
 
        
///    
         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

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

转载于:https://www.cnblogs.com/yuanbao/archive/2009/09/08/1562336.html

你可能感兴趣的:(.NET中获取系统硬件信息)