惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Palo Alto Networks Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
S
Schneier on Security
S
Securelist
酷 壳 – CoolShell
酷 壳 – CoolShell
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cyberwarzone
Cyberwarzone
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
GbyAI
GbyAI
Security Latest
Security Latest
Last Week in AI
Last Week in AI
Microsoft Security Blog
Microsoft Security Blog
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
Webroot Blog
Webroot Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
TaoSecurity Blog
TaoSecurity Blog
C
Cisco Blogs
博客园 - 【当耐特】
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
B
Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
The Last Watchdog
The Last Watchdog
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
Project Zero
Project Zero
WordPress大学
WordPress大学
L
LINUX DO - 最新话题
F
Fortinet All Blogs
L
LINUX DO - 热门话题
PCI Perspectives
PCI Perspectives
Simon Willison's Weblog
Simon Willison's Weblog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
MongoDB | Blog
MongoDB | Blog
Latest news
Latest news
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
The Hacker News
The Hacker News
爱范儿
爱范儿
O
OpenAI News
J
Java Code Geeks
T
The Exploit Database - CXSecurity.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 君

50口诀让你轻松记四六级单词 苦瓜炒蛋 随笔 将货币数字描述转化成中文描述 - 君 - 博客园 年旦前 经历一劫 2007-12-16 随缘也 留脚 一篇不错的文章 .net修改网络配置,如IP,DNS等 .net写发送邮件工具 2007-2-3 2006-12-23 网站宣传 用C#播放声音文件 DotNetMagic做应用程序界面(类似office2003风格) Grove——.NET中的ORM实现(转载,学习...........)
.NET中获取系统硬件信息
· 2006-11-26 · via 博客园 - 君

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

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