• .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 

        
    /// <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

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

  • 相关阅读:
    2021.3.16
    2021.3.15
    通过指定的URL获取返回图片的BASE64编码
    Redis系统学习之缓存穿透,缓存击穿,缓存雪崩的概念及其解决方案
    Redis系统学习之其他高可用模型
    Redis系统学习之哨兵模式
    Redis系统学习之主从复制
    Redis系统学习之发布订阅
    Redis系统学习之持久化(AOF)
    Redis系统学习之持久化(RDB)
  • 原文地址:https://www.cnblogs.com/yuanbao/p/1562336.html
Copyright © 2020-2023  润新知