获取计算机中的硬件信息
在项目开发过程中,经常会需要读取所在计算机的硬件信息,包括CPU的序列号,主板的序列号,硬盘的序列号,MAC地址,IP地址,用户名,系统类型,计算机名称,操作系统类型,物理内存大小,BIOS内容等。
开发环境:VS2005 .NET2.0
项目工程文件:Computer.zip
/*****************************************************************/
/* 作者:虞晓杰* Emial:fishyxj@sina.com* 2011.9.26* 功能:用于获取计算机的各种信息,包括CPU的ID,MAC地址,硬盘ID,* IP地址登录用户名,计算机名称,系统类型,物理内存,主板的ID,* BIOS的ID* * 缺陷:当计算机存在虚拟网卡时,无法区分虚拟网卡与真实网卡,因此* 读取MAC地址时,会存在不稳定的情况。需要自行处理虚拟网卡MAC的情* 况
/*****************************************************************/using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.Collections;
using System.Net.NetworkInformation;
using Microsoft.Win32;namespace XFish.Utils
{/// <summary>/// 计算机信息类/// </summary>public class Computer{#region 类内部变量private string _CpuID;private string _MacAddress;private ArrayList _MacAddList;private string _DiskID;private string _IpAddress;private string _LoginUserName;private string _ComputerName;private string _SystemType;private string _TotalPhysicalMemory; //单位:M private string _BaseboardID;private string _BiosID;private static Computer _instance;#endregion#region 类属性/// <summary>/// 获取计算机信息全局实例/// </summary>/// <returns>Computer实例</returns>public static Computer Instance(){if (_instance == null)_instance = new Computer();return _instance;}/// <summary>/// 获取CPU的ID/// </summary>public string CpuID{get { return _CpuID; }}/// <summary>/// 获取MAC地址/// </summary>public string MacAddress{get { return _MacAddress; }}/// <summary>/// 获取计算机中的MAC地址列表,当存在多个网卡时(包括虚拟网卡)/// </summary>public ArrayList MacAddList{get { return _MacAddList; }}/// <summary>/// 获取硬盘ID/// </summary>public string DiskID{get { return _DiskID; }}/// <summary>/// 获取IP地址(活跃的网卡)/// </summary>public string IpAddress{get { return _IpAddress; }}/// <summary>/// 系统登录用户名/// </summary>public string LoginUserName{get { return _LoginUserName; }}/// <summary>/// 计算机名称/// </summary>public string ComputerName{get { return _ComputerName; }}/// <summary>/// 操作系统类型/// </summary>public string SystemType{get { return _SystemType; }}/// <summary>/// 总的物理内存/// </summary>public string TotalPhysicalMemory{get { return _TotalPhysicalMemory; }}/// <summary>/// 主板ID/// </summary>public string BaseboardID{get { return _BaseboardID; }}/// <summary>/// BIOS的ID/// </summary>public string BiosID{get { return _BiosID; }}#endregion #region 类初始化public Computer(){_CpuID = GetCpuID();_MacAddress = GetMacAddress();_MacAddList = GetMacAddList();_DiskID = GetDiskID();_IpAddress = GetIPAddress();_LoginUserName = GetUserName();_SystemType = GetSystemType();_TotalPhysicalMemory = GetTotalPhysicalMemory();_ComputerName = GetComputerName();_BaseboardID = GetBaseBoardID();_BiosID = GetBiosID();}#endregion#region 类方法/// <summary>/// 获取BIOS序列号/// </summary>/// <returns></returns>private string GetBiosID(){try{//方法一//SelectQuery Query = new SelectQuery("SELECT * FROM Win32_BaseBoard");//ManagementObjectSearcher driveID = new ManagementObjectSearcher(Query);//ManagementObjectCollection.ManagementObjectEnumerator data = driveID.Get().GetEnumerator();//data.MoveNext();//ManagementBaseObject board = data.Current;//return board.GetPropertyValue("SerialNumber").ToString();//方法二System.Management.ManagementObjectSearcher cmicWmi = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");string biosid = string.Empty;ManagementObjectCollection moc = cmicWmi.Get();foreach (ManagementObject cmicWmiObj in moc){biosid = cmicWmiObj["SerialNumber"].ToString();}return biosid;//System.Management.ManagementObjectSearcher cmicWmi = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");//string biosid = string.Empty;//ManagementObjectCollection moc = cmicWmi.Get();//foreach (ManagementObject cmicWmiObj in moc)//{// biosid += GetAllInfo(cmicWmiObj);//}//return biosid;}catch(Exception ex){//throw new Exception("unknow:"+ex.Message);return "unknow";}finally{}}/// <summary>/// 获取CPU序列号/// </summary>/// <returns></returns>private 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;//string cpuInfo = "";//cpu序列号 //ManagementClass mc = new ManagementClass("Win32_Processor");//ManagementObjectCollection moc = mc.GetInstances();//foreach (ManagementObject mo in moc)//{// cpuInfo += GetAllInfo(mo);//}//moc = null;//mc = null;//return cpuInfo;}catch (Exception ex){return "unknow";}finally{}}/// <summary>/// 获取MAC地址列表/// </summary>/// <returns></returns>private ArrayList GetMacAddList(){try{ArrayList maclist = new ArrayList();ArrayList warelessMacList = new ArrayList();NetworkInterface[] fNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();foreach (NetworkInterface adapter in fNetworkInterfaces){string fRegistryKey = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\" + adapter.Id + "\\Connection";RegistryKey rk = Registry.LocalMachine.OpenSubKey(fRegistryKey, false);if (rk != null){// 区分 PnpInstanceID // 如果前面有 PCI 就是本机的真实网卡 // MediaSubType 为 01 则是常见网卡,02为无线网卡。 string fPnpInstanceID = rk.GetValue("PnpInstanceID", "").ToString();int fMediaSubType = Convert.ToInt32(rk.GetValue("MediaSubType", 0));if (fPnpInstanceID.Length > 3 &&fPnpInstanceID.Substring(0, 3) == "PCI"){string mac = adapter.GetPhysicalAddress().ToString();mac = GetMacStr(mac);maclist.Add(mac);}else if (fMediaSubType == 1)continue;else if (fMediaSubType == 2){string mac = adapter.GetPhysicalAddress().ToString();mac = GetMacStr(mac);warelessMacList.Add(mac);}}}maclist.AddRange(warelessMacList);return maclist;}catch{try{ArrayList maclist = new ArrayList();ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if (mo["MacAddress"] != null){string mac = mo["MacAddress"].ToString();maclist.Add(mac);}}moc = null;mc = null;return maclist;}catch{return null;}}}/// <summary>/// 获取MAC地址/// </summary>/// <returns></returns>private string GetMacAddress(){try{string warelessMac = string.Empty;string mac = string.Empty;NetworkInterface[] fNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();foreach (NetworkInterface adapter in fNetworkInterfaces){string fRegistryKey = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\" + adapter.Id + "\\Connection";RegistryKey rk = Registry.LocalMachine.OpenSubKey(fRegistryKey, false);if (rk != null){// 区分 PnpInstanceID // 如果前面有 PCI 就是本机的真实网卡 // MediaSubType 为 01 则是常见网卡,02为无线网卡。 string fPnpInstanceID = rk.GetValue("PnpInstanceID", "").ToString();int fMediaSubType = Convert.ToInt32(rk.GetValue("MediaSubType", 0));if (fPnpInstanceID.Length > 3 &&fPnpInstanceID.Substring(0, 3) == "PCI"){mac = adapter.GetPhysicalAddress().ToString();break;}else if (fMediaSubType == 1)continue;else if (fMediaSubType == 2)warelessMac = adapter.GetPhysicalAddress().ToString();} }if (!mac.Equals(string.Empty))return GetMacStr(mac);else if (!warelessMac.Equals(string.Empty))return GetMacStr(warelessMac);elsereturn "unknow";}catch (Exception ex){return "unknow";}finally{}}/// <summary>/// 获取MAC地址/// </summary>/// <param name="mac"></param>/// <returns></returns>private string GetMacStr(string mac){string newmac = string.Empty;newmac = mac.Substring(0, 2);mac = mac.Substring(2, mac.Length - 2);while (!mac.Equals(string.Empty)){newmac += ":";newmac += mac.Substring(0, 2);mac = mac.Substring(2, mac.Length - 2);}return newmac;}/// <summary>/// 获取IP地址/// </summary>/// <returns></returns>private 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 (Exception ex){return "unknow";}}/// <summary>/// 获取硬盘的序列号/// </summary>/// <returns></returns>private string GetDiskID(){try{//方法一//ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");//String strHardDiskID = null;//foreach (ManagementObject mo in searcher.Get())//{// strHardDiskID = mo["SerialNumber"].ToString().Trim();// break;//}//return strHardDiskID; //方法二//System.Management.ManagementObjectSearcher cmicWmi = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");//string diskid = string.Empty;//foreach (ManagementObject cmicWmiObj in cmicWmi.Get())//{// diskid = cmicWmiObj["signature"].ToString();//}//return diskid;//方法三 //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;//方法四System.Management.ManagementObjectSearcher cmicWmi = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");string tmp = string.Empty;foreach (ManagementObject cmicWmiObj in cmicWmi.Get()){bool isSyspan = false;System.Management.PropertyDataCollection pdc = cmicWmiObj.Properties;string info = string.Empty;foreach (PropertyData pd in pdc){if (pd.Name.Equals("Name")){if (pd.Value.Equals("\\\\.\\PHYSICALDRIVE0")){isSyspan = true;}}if (isSyspan){if (pd.Name.Equals("PNPDeviceID")){tmp += pd.Value;}else if (pd.Name.Equals("Signature")){tmp += pd.Value;break;}}}}return tmp;}catch (Exception ex){return "unknow";}finally{}}/// <summary> /// 操作系统的登录用户名 /// </summary> /// <returns></returns> private 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 (Exception ex){return "unknow";}finally{}}/// <summary> /// 获取计算机操作系统类型 /// </summary> /// <returns></returns> private 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 (Exception ex){return "unknow";}finally{}}/// <summary> /// 获取计算机物理内存 /// </summary> /// <returns></returns> private 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 (Exception ex){return "unknow";}finally{}}/// <summary>/// 获取主板的ID/// </summary>/// <returns></returns>private string GetBaseBoardID(){try{//string strbNumber = string.Empty;//ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_baseboard");//foreach (ManagementObject mo in mos.Get())//{// strbNumber = mo["SerialNumber"].ToString();// break;//}//return strbNumber;ManagementClass mc = new ManagementClass("WIN32_BaseBoard");ManagementObjectCollection moc = mc.GetInstances();string SerialNumber = "";foreach (ManagementObject mo in moc){SerialNumber = mo["SerialNumber"].ToString();break;}return SerialNumber;//ManagementClass mc = new ManagementClass("WIN32_BaseBoard");//ManagementObjectCollection moc = mc.GetInstances();//string SerialNumber = "";//foreach (ManagementObject mo in moc)//{// SerialNumber = GetAllInfo(mo);//}//return SerialNumber;}catch (Exception ex){return "unknow";}finally{}}/// <summary>/// 获取计算机名称/// </summary>/// <returns></returns>private string GetComputerName(){try{return System.Environment.GetEnvironmentVariable("ComputerName");}catch(Exception ex){return "unknow";}finally{}}#endregion}
}
转载于:https://www.cnblogs.com/fishyxj/archive/2011/09/26/2192418.html
获取计算机中的硬件信息相关推荐
- 1 什么叫多媒体计算机,选择1多媒体计算机中的媒体信息是指()文字声音.ppt
<选择1多媒体计算机中的媒体信息是指()文字声音.ppt>由会员分享,可在线阅读,更多相关<选择1多媒体计算机中的媒体信息是指()文字声音.ppt(8页珍藏版)>请在人人文库网 ...
- C#获取电脑系统信息和硬件信息,兼容XP/Win7/Win10(依赖System.Management.dll)
文章目录 一.前言 二.具体实现 1.引入System.Management.dll 2.引入命名空间 3.获取系统信息 4.获取CPU信息 5.获取内存信息 6.获取硬盘信息 7.获取显卡信息 三. ...
- 数字计算机所有的信息是采用什么表示的,第2课在计算机中如何表示信息
<第2课在计算机中如何表示信息>由会员分享,可在线阅读,更多相关<第2课在计算机中如何表示信息(13页珍藏版)>请在人人文库网上搜索. 1.如何在计算机中表达信息,在计算机中, ...
- linux内核4.14.10查看网卡型号,Linux中查看硬件信息命令
Linux中查看硬件信息命令 1, 主板信息 .查看主板的序列号 -------------------------------------------------- #使用命令 dmidecode ...
- Android中获取手机中的联系人信息
#Android中获取手机中的联系人信息 1.0.查看系统通讯录的表,表路径:data->data->com.android.providers.contacts->database ...
- 软件(software)是计算机中与硬件
软件 [ Software ]: 软件(software)是 计算机 中与硬件(hardware)相结合的一部分,包括 程序 (program)和文档(document).用一个等式表示为:软 ...
- [从零学习汇编语言] - 计算机中的硬件与软件
文章目录 前言 一. 汇编语言简介 1.1 什么是汇编语言 1.2 机器语言简介 1.3 汇编语言的演变史 1.4 汇编语言的广义组成 二.硬件与软件 2.1 思考 2.2 计算机的硬件构成 (1)存 ...
- 如何通过 .NETCore 获取 Linux,Mac 的硬件信息?
咨询区 Pascal Jackson: 请问我如何通过 .NET Core 去识别 Linux/Mac 电脑上的硬件信息?在 windows 上我可以通过 System.Management 下 WM ...
- java读取pdf签名_Java 获取PDF中的数字签名信息
一.概述及程序环境要求 本文以Java代码演示如何获取PDF文档中的数字签名信息,包括签名人.签名位置.日期.原因.联系方式.签名在文档中的坐标等等. 程序环境包括: Spire.Pdf.jar(ja ...
最新文章
- robot简单功能测试脚本设计(例子)
- 想转行学软件测试要注意哪些问题
- 听说过代码洁癖,Bug洁癖怎么解?
- 第 4 章 Glance - 022 - 如何使用 OpenStack CLI
- Visual Studio调试之符号文件
- tensorflow基本概念
- [原]windbg调试系列——崩溃在ComFriendlyWaitMtaThreadProc
- 计算机管理ap,如何设置AC功能管理无线AP
- box-shadow技巧分享
- 文件后缀_电脑文件名的后缀即扩展名的显示和隐藏方法
- 基于RHEL6.0的mysql服务器复制的主主架构实现
- Unity脚本中查找的几种方法优劣以及坑
- linux librtmp 编译,在linux系统下安装python librtmp包的实现方法
- 同步时钟配置电脑自动校时
- php 把数字转化为大写中文(完善版)
- shell脚本之正则表达式
- 2020年缴费基数调整
- 22.【sinx幂级数求和】
- ceph monitor paxos算法
- Sun ONE 白皮书
热门文章
- Redis宕机了怎么办?
- 因你不同,2021 阿里云开发者大会重磅开启 @ 所有开发者!
- 对话 Dubbo 唤醒者北纬:3.0 将至,阿里核心电商业务也在用 Dubbo
- 选购商用计算机任务书,计算机网络综合实习任务书-.doc
- android日志收集存入mysql_rsyslog+analyzer+mysql实现日志收集展示
- 导购提成怎么算_only导购工资提成怎么算标准
- linux双4g内存花屏,linux不支持4G内存的处理方法
- vue 禁止显示本网页由、、_【VUE/JS】vue和js禁止浏览器页面后退
- Python Study:(三)python之断言处理
- 【杂谈】如何在专家指导下系统性学习自然语言处理