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

推荐订阅源

U
Unit 42
T
Threatpost
C
CERT Recently Published Vulnerability Notes
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Security Archives - TechRepublic
Security Archives - TechRepublic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
Project Zero
Project Zero
H
Heimdal Security Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Know Your Adversary
Know Your Adversary
Google Online Security Blog
Google Online Security Blog
W
WeLiveSecurity
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Schneier on Security
Schneier on Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
News | PayPal Newsroom
Hacker News - Newest:
Hacker News - Newest: "LLM"
H
Hacker News: Front Page
L
LINUX DO - 热门话题
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
Cloudbric
Cloudbric
V
Vulnerabilities – Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
S
Securelist
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
TaoSecurity Blog
TaoSecurity Blog
NISL@THU
NISL@THU
N
News and Events Feed by Topic
S
Security Affairs
The Last Watchdog
The Last Watchdog
T
Tor Project blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
P
Palo Alto Networks Blog
AWS News Blog
AWS News Blog
P
Proofpoint News Feed
C
Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Tenable Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security

博客园 - 君

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

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