LINUX DOTNET      Linux DotNET 中文社区

Linux .NET编程与应用技术之专业网站:www.linuxdot.net !     返回首页    
   
[楼主] C#获取电脑硬件配置信息

using System;  
using System.Management;  
using System.Collections;  
using System.Collections.Specialized;  
using System.Text;  

namespace Rainsoft.Management  
{  
#region WMIPath  
public enum WMIPath  
{  
// 硬件  
Win32_Processor, // CPU 处理器  
Win32_PhysicalMemory, // 物理内存条  
Win32_Keyboard, // 键盘  
Win32_PointingDevice, // 点输入设备,包括鼠标。  
Win32_FloppyDrive, // 软盘驱动器  
Win32_DiskDrive, // 硬盘驱动器  
Win32_CDROMDrive, // 光盘驱动器  
Win32_BaseBoard, // 主板  
Win32_BIOS, // BIOS 芯片  
Win32_ParallelPort, // 并口  
Win32_SerialPort, // 串口  
Win32_SerialPortConfiguration, // 串口配置  
Win32_SoundDevice, // 多媒体设置,一般指声卡。  
Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP)  
Win32_USBController, // USB 控制器  
Win32_NetworkAdapter, // 网络适配器  
Win32_NetworkAdapterConfiguration, // 网络适配器设置  
Win32_Printer, // 打印机  
Win32_PrinterConfiguration, // 打印机设置  
Win32_PrintJob, // 打印机任务  
Win32_TCPIPPrinterPort, // 打印机端口  
Win32_POTSModem, // MODEM  
Win32_POTSModemToSerialPort, // MODEM 端口  
Win32_DesktopMonitor, // 显示器  
Win32_DisplayConfiguration, // 显卡  
Win32_DisplayControllerConfiguration, // 显卡设置  
Win32_VideoController, // 显卡细节。  
Win32_VideoSettings, // 显卡支持的显示模式。  

// 操作系统  
Win32_TimeZone, // 时区  
Win32_SystemDriver, // 驱动程序  
Win32_DiskPartition, // 磁盘分区  
Win32_LogicalDisk, // 逻辑磁盘  
Win32_LogicalDiskToPartition, // 逻辑磁盘所在分区及始末位置。  
Win32_LogicalMemoryConfiguration, // 逻辑内存配置  
Win32_PageFile, // 系统页文件信息  
Win32_PageFileSetting, // 页文件设置  
Win32_BootConfiguration, // 系统启动配置  
Win32_ComputerSystem, // 计算机信息简要  
Win32_OperatingSystem, // 操作系统信息  
Win32_StartupCommand, // 系统自动启动程序  
Win32_Service, // 系统安装的服务  
Win32_Group, // 系统管理组  
Win32_GroupUser, // 系统组帐号  
Win32_UserAccount, // 用户帐号  
Win32_Process, // 系统进程  
Win32_Thread, // 系统线程  
Win32_Share, // 共享  
Win32_NetworkClient, // 已安装的网络客户端  
Win32_NetworkProtocol, // 已安装的网络协议  
}  
#endregion  

/// <summary>  
/// 获取系统信息  
/// </summary>  
/// <example>  
/// <code>  
/// WMI w = new WMI(WMIPath.Win32_NetworkAdapterConfiguration);  
/// for (int i = 0; i < w.Count; i ++)  
/// {  
/// if ((bool)w[i, "IPEnabled"])  
/// {  
/// Console.WriteLine("Caption:{0}", w[i, "Caption"]);  
/// Console.WriteLine("MAC Address:{0}", w[i, "MACAddress"]);  
/// }  
/// }  
/// </code>  
/// </example>  
public sealed class WMI  
{  
private ArrayList mocs;  
private StringDictionary names; // 用来存储属性名,便于忽略大小写查询正确名称。  

/// <summary>  
/// 信息集合数量  
/// </summary>  
public int Count  
{  
get { return mocs.Count; }  
}  

/// <summary>  
/// 获取指定属性值,注意某些结果可能是数组。  
/// </summary>  
public object this[int index, string propertyName]  
{  
get  
{  
try  
{  
string trueName = names[propertyName.Trim()]; // 以此可不区分大小写获得正确的属性名称。  
Hashtable h = (Hashtable)mocs[index];  
return h[trueName];  
}  
catch  
{  
return null;  
}  
}  
}  

/// <summary>  
/// 返回所有属性名称。  
/// </summary>  
/// <param name="index"></param>  
/// <returns></returns>  
public string[] PropertyNames(int index)  
{  
try  
{  
Hashtable h = (Hashtable)mocs[index];  
string[] result = new string[h.Keys.Count];  

h.Keys.CopyTo(result, 0);  

Array.Sort(result);  
return result;  
}  
catch  
{  
return null;  
}  
}  

/// <summary>  
/// 返回测试信息。  
/// </summary>  
/// <returns></returns>  
public string Test()  
{  
try  
{  
StringBuilder result = new StringBuilder(1000);  

for (int i = 0; i < Count; i++)  
{  
int j = 0;  
foreach(string s in PropertyNames(i))  
{  
result.Append(string.Format("{0}:{1}={2}\n", ++j, s, this[i, s]));  

if (this[i, s] is Array)  
{  
Array v1 = this[i, s] as Array;  
for (int x = 0; x < v1.Length; x++)  
{  
result.Append("\t" + v1.GetValue(x) + "\n");  
}  
}  
}  
result.Append("======WMI=======\n");  
}  

return result.ToString();  
}  
catch  
{  
return string.Empty;  
}  
}  

/// <summary>  
/// 构造函数  
/// </summary>  
/// <param name="path"></param>  
public WMI(string path)  
{  
names = new StringDictionary();  
mocs = new ArrayList();  

try  
{  
ManagementClass cimobject = new ManagementClass(path);  
ManagementObjectCollection moc = cimobject.GetInstances();  

bool ok = false;  
foreach(ManagementObject mo in moc)  
{  
Hashtable o = new Hashtable();  
mocs.Add(o);  

foreach (PropertyData p in mo.Properties)  
{  
o.Add(p.Name, p.Value);  
if (!ok) names.Add(p.Name, p.Name);  
}  

ok = true;  
mo.Dispose();  
}  
moc.Dispose();  
}  
catch(Exception e)  
{  
throw new Exception(e.Message);  
}  
}  

/// <summary>  
/// 构造函数  
/// </summary>  
/// <param name="path"></param>  
public WMI(WMIPath path): this(path.ToString())  
{  
}  
}  
}

作者:network   发布时间:08年04月20日   可选操作:删除 回复

 
   
   

留言回复:
标题: * 标题必填
作者:   * 请填上你的名字  
操作键:   * 填入几个字母表示是您写的,便于进一步操作
发言内容:
 
发贴者须知:
1、您无需注册即可发贴,但是,贴子内容必须在法律法规和社会公德所允许的范围内;
2、本站专注IT技术,谢绝包括政治、社会、情感等任何与IT技术无关的贴子在本站发表;
3、本站保留对任何贴子进行删除、禁用、更改、举报、追究等所有权利;
 
今天是: 星期一  星期天  星期二  星期三  星期四  星期五  星期六