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

推荐订阅源

S
Schneier on Security
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
D
DataBreaches.Net
F
Full Disclosure
腾讯CDC
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
The Register - Security
The Register - Security
WordPress大学
WordPress大学
博客园 - 聂微东
雷峰网
雷峰网
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy International News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
A
Arctic Wolf
Scott Helme
Scott Helme
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
博客园 - 三生石上(FineUI控件)
Know Your Adversary
Know Your Adversary
AWS News Blog
AWS News Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CERT Recently Published Vulnerability Notes
O
OpenAI News
Project Zero
Project Zero
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Application and Cybersecurity Blog
Application and Cybersecurity Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
P
Palo Alto Networks Blog
Schneier on Security
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

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