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

推荐订阅源

F
Fortinet All Blogs
Attack and Defense Labs
Attack and Defense Labs
V2EX - 技术
V2EX - 技术
O
OpenAI News
S
Secure Thoughts
H
Heimdal Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Schneier on Security
Schneier on Security
H
Hacker News: Front Page
S
Security Affairs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
The Register - Security
The Register - Security
GbyAI
GbyAI
Cloudbric
Cloudbric
MongoDB | Blog
MongoDB | Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
Forbes - Security
Forbes - Security
Y
Y Combinator Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
Hacker News - Newest:
Hacker News - Newest: "LLM"
The Cloudflare Blog
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
Webroot Blog
Webroot Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog
T
Tor Project blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Hacker News: Ask HN
Hacker News: Ask HN
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
N
News and Events Feed by Topic
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
V
V2EX
T
Tailwind CSS Blog
SecWiki News
SecWiki News
NISL@THU
NISL@THU
C
Check Point Blog

博客园 - 元宝

2019年以后ArcGIS 调用天地图的资源URL xmlSpy套件(Altova MissionKit 2016)的Ollydbg调试过程及破解 RockWare RockWorks的Ollydbg调试过程及注册机(破解)思路 [转] SQL删除重复数据只保留一条 自已动手制做“0中带斜杠”的矢量字体 颜色直方图 HSI、HSV、RGB、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型的区别 Visual MODFLOW4.1中文版学习资料 VS2005的C#使用WORD COM组件 英语飙升的好方法 ArcGIS删除重复点数据 如何完全卸载并重装ArcGIS ArcGIS Server分布式安装 制作ArcGIS DLL插件的安装包 Google Map浏览下载器 TTF文件的制作——打造属于自己的字体 Arcgis数据转换经验三测 地质三维软件Ctech(MVS,EVS-PRO)破解版 Visual MODFLOW4.1中文破解版
.NET中获取系统硬件信息
元宝 · 2009-09-08 · 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

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