开发者社区> zting科技> 正文

使用C#获取CPU及硬盘序列号的源代码

简介:
+关注继续查看

首先需添加对System.Management的引用。

view plaincopy to clipboardprint?
using System;    
using System.Runtime.InteropServices;    
using System.Management;    
  
namespace Hardware    
{    
    /// <summary>    
    /// HardwareInfo 的摘要说明。    
    /// </summary>    
    public class HardwareInfo    
    {    
        //取机器名     
        public string GetHostName()    
        {    
            return System.Net.Dns.GetHostName();    
        }    
        //取CPU编号    
        public String GetCpuID()    
        {    
            try    
            {    
                ManagementClass mc = new ManagementClass("Win32_Processor");    
                ManagementObjectCollection moc = mc.GetInstances();    
  
                String strCpuID = null;    
                foreach (ManagementObject mo in moc)    
                {    
                    strCpuID = mo.Properties["ProcessorId"].Value.ToString();    
                    break;    
                }    
                return strCpuID;    
            }    
            catch    
            {    
                return "";    
            }    
  
        }//end method    
  
        //取第一块硬盘编号    
        public String GetHardDiskID()    
        {    
            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;    
            }    
            catch    
            {    
                return "";    
            }    
        }//end     
  
        public enum NCBCONST    
        {    
            NCBNAMSZ = 16,      /* absolute length of a net name         */    
            MAX_LANA = 254,      /* lana's in range 0 to MAX_LANA inclusive   */    
            NCBENUM = 0x37,      /* NCB ENUMERATE LANA NUMBERS            */    
            NRC_GOODRET = 0x00,      /* good return                              */    
            NCBRESET = 0x32,      /* NCB RESET                        */    
            NCBASTAT = 0x33,      /* NCB ADAPTER STATUS                  */    
            NUM_NAMEBUF = 30,      /* Number of NAME's BUFFER               */    
        }    
  
        [StructLayout(LayoutKind.Sequential)]    
        public struct ADAPTER_STATUS    
        {    
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]    
            public byte[] adapter_address;    
            public byte rev_major;    
            public byte reserved0;    
            public byte adapter_type;    
            public byte rev_minor;    
            public ushort duration;    
            public ushort frmr_recv;    
            public ushort frmr_xmit;    
            public ushort iframe_recv_err;    
            public ushort xmit_aborts;    
            public uint xmit_success;    
            public uint recv_success;    
            public ushort iframe_xmit_err;    
            public ushort recv_buff_unavail;    
            public ushort t1_timeouts;    
            public ushort ti_timeouts;    
            public uint reserved1;    
            public ushort free_ncbs;    
            public ushort max_cfg_ncbs;    
            public ushort max_ncbs;    
            public ushort xmit_buf_unavail;    
            public ushort max_dgram_size;    
            public ushort pending_sess;    
            public ushort max_cfg_sess;    
            public ushort max_sess;    
            public ushort max_sess_pkt_size;    
            public ushort name_count;    
        }    
  
        [StructLayout(LayoutKind.Sequential)]    
        public struct NAME_BUFFER    
        {    
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]    
            public byte[] name;    
            public byte name_num;    
            public byte name_flags;    
        }    
  
        [StructLayout(LayoutKind.Sequential)]    
        public struct NCB    
        {    
            public byte ncb_command;    
            public byte ncb_retcode;    
            public byte ncb_lsn;    
            public byte ncb_num;    
            public IntPtr ncb_buffer;    
            public ushort ncb_length;    
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]    
            public byte[] ncb_callname;    
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]    
            public byte[] ncb_name;    
            public byte ncb_rto;    
            public byte ncb_sto;    
            public IntPtr ncb_post;    
            public byte ncb_lana_num;    
            public byte ncb_cmd_cplt;    
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]    
            public byte[] ncb_reserve;    
            public IntPtr ncb_event;    
        }    
  
        [StructLayout(LayoutKind.Sequential)]    
        public struct LANA_ENUM    
        {    
            public byte length;    
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.MAX_LANA)]    
            public byte[] lana;    
        }    
  
        [StructLayout(LayoutKind.Auto)]    
        public struct ASTAT    
        {    
            public ADAPTER_STATUS adapt;    
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NUM_NAMEBUF)]    
            public NAME_BUFFER[] NameBuff;    
        }    
        public class Win32API    
        {    
            [DllImport("NETAPI32.DLL")]    
            public static extern char Netbios(ref NCB ncb);    
        }    
  
        public string GetMacAddress()    
        {    
            string addr = "";    
            try    
            {    
                int cb;    
                ASTAT adapter;    
                NCB Ncb = new NCB();    
                char uRetCode;    
                LANA_ENUM lenum;    
  
                Ncb.ncb_command = (byte)NCBCONST.NCBENUM;    
                cb = Marshal.SizeOf(typeof(LANA_ENUM));    
                Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);    
                Ncb.ncb_length = (ushort)cb;    
                uRetCode = Win32API.Netbios(ref Ncb);    
                lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));    
                Marshal.FreeHGlobal(Ncb.ncb_buffer);    
                if (uRetCode != (short)NCBCONST.NRC_GOODRET)    
                    return "";    
  
                for (int i = 0; i < lenum.length; i++)    
                {    
                    Ncb.ncb_command = (byte)NCBCONST.NCBRESET;    
                    Ncb.ncb_lana_num = lenum.lana[i];    
                    uRetCode = Win32API.Netbios(ref Ncb);    
                    if (uRetCode != (short)NCBCONST.NRC_GOODRET)    
                        return "";    
  
                    Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;    
                    Ncb.ncb_lana_num = lenum.lana[i];    
                    Ncb.ncb_callname[0] = (byte)'*';    
                    cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF;    
                    Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);    
                    Ncb.ncb_length = (ushort)cb;    
                    uRetCode = Win32API.Netbios(ref Ncb);    
                    adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));    
                    Marshal.FreeHGlobal(Ncb.ncb_buffer);    
  
                    if (uRetCode == (short)NCBCONST.NRC_GOODRET)    
                    {    
                        if (i > 0)    
                            addr += ":";    
                        addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",    
                         adapter.adapt.adapter_address[0],    
                         adapter.adapt.adapter_address[1],    
                         adapter.adapt.adapter_address[2],    
                         adapter.adapt.adapter_address[3],    
                         adapter.adapt.adapter_address[4],    
                         adapter.adapt.adapter_address[5]);    
                    }    
                }    
            }    
            catch    
            { }    
            return addr.Replace(' ', '0');    
        }    
    }    
}   
using System; 
using System.Runtime.InteropServices; 
using System.Management;

namespace Hardware 

    /// <summary> 
    /// HardwareInfo 的摘要说明。 
    /// </summary> 
    public class HardwareInfo 
    { 
        //取机器名  
        public string GetHostName() 
        { 
            return System.Net.Dns.GetHostName(); 
        } 
        //取CPU编号 
        public String GetCpuID() 
        { 
            try 
            { 
                ManagementClass mc = new ManagementClass("Win32_Processor"); 
                ManagementObjectCollection moc = mc.GetInstances();

                String strCpuID = null; 
                foreach (ManagementObject mo in moc) 
                { 
                    strCpuID = mo.Properties["ProcessorId"].Value.ToString(); 
                    break; 
                } 
                return strCpuID; 
            } 
            catch 
            { 
                return ""; 
            }

        }//end method

        //取第一块硬盘编号 
        public String GetHardDiskID() 
        { 
            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; 
            } 
            catch 
            { 
                return ""; 
            } 
        }//end 

        public enum NCBCONST 
        { 
            NCBNAMSZ = 16,      /* absolute length of a net name         */ 
            MAX_LANA = 254,      /* lana's in range 0 to MAX_LANA inclusive   */ 
            NCBENUM = 0x37,      /* NCB ENUMERATE LANA NUMBERS            */ 
            NRC_GOODRET = 0x00,      /* good return                              */ 
            NCBRESET = 0x32,      /* NCB RESET                        */ 
            NCBASTAT = 0x33,      /* NCB ADAPTER STATUS                  */ 
            NUM_NAMEBUF = 30,      /* Number of NAME's BUFFER               */ 
        }

        [StructLayout(LayoutKind.Sequential)] 
        public struct ADAPTER_STATUS 
        { 
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] 
            public byte[] adapter_address; 
            public byte rev_major; 
            public byte reserved0; 
            public byte adapter_type; 
            public byte rev_minor; 
            public ushort duration; 
            public ushort frmr_recv; 
            public ushort frmr_xmit; 
            public ushort iframe_recv_err; 
            public ushort xmit_aborts; 
            public uint xmit_success; 
            public uint recv_success; 
            public ushort iframe_xmit_err; 
            public ushort recv_buff_unavail; 
            public ushort t1_timeouts; 
            public ushort ti_timeouts; 
            public uint reserved1; 
            public ushort free_ncbs; 
            public ushort max_cfg_ncbs; 
            public ushort max_ncbs; 
            public ushort xmit_buf_unavail; 
            public ushort max_dgram_size; 
            public ushort pending_sess; 
            public ushort max_cfg_sess; 
            public ushort max_sess; 
            public ushort max_sess_pkt_size; 
            public ushort name_count; 
        }

        [StructLayout(LayoutKind.Sequential)] 
        public struct NAME_BUFFER 
        { 
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)] 
            public byte[] name; 
            public byte name_num; 
            public byte name_flags; 
        }

        [StructLayout(LayoutKind.Sequential)] 
        public struct NCB 
        { 
            public byte ncb_command; 
            public byte ncb_retcode; 
            public byte ncb_lsn; 
            public byte ncb_num; 
            public IntPtr ncb_buffer; 
            public ushort ncb_length; 
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)] 
            public byte[] ncb_callname; 
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)] 
            public byte[] ncb_name; 
            public byte ncb_rto; 
            public byte ncb_sto; 
            public IntPtr ncb_post; 
            public byte ncb_lana_num; 
            public byte ncb_cmd_cplt; 
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] 
            public byte[] ncb_reserve; 
            public IntPtr ncb_event; 
        }

        [StructLayout(LayoutKind.Sequential)] 
        public struct LANA_ENUM 
        { 
            public byte length; 
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.MAX_LANA)] 
            public byte[] lana; 
        }

        [StructLayout(LayoutKind.Auto)] 
        public struct ASTAT 
        { 
            public ADAPTER_STATUS adapt; 
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NUM_NAMEBUF)] 
            public NAME_BUFFER[] NameBuff; 
        } 
        public class Win32API 
        { 
            [DllImport("NETAPI32.DLL")] 
            public static extern char Netbios(ref NCB ncb); 
        }

        public string GetMacAddress() 
        { 
            string addr = ""; 
            try 
            { 
                int cb; 
                ASTAT adapter; 
                NCB Ncb = new NCB(); 
                char uRetCode; 
                LANA_ENUM lenum;

                Ncb.ncb_command = (byte)NCBCONST.NCBENUM; 
                cb = Marshal.SizeOf(typeof(LANA_ENUM)); 
                Ncb.ncb_buffer = Marshal.AllocHGlobal(cb); 
                Ncb.ncb_length = (ushort)cb; 
                uRetCode = Win32API.Netbios(ref Ncb); 
                lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM)); 
                Marshal.FreeHGlobal(Ncb.ncb_buffer); 
                if (uRetCode != (short)NCBCONST.NRC_GOODRET) 
                    return "";

                for (int i = 0; i < lenum.length; i++) 
                { 
                    Ncb.ncb_command = (byte)NCBCONST.NCBRESET; 
                    Ncb.ncb_lana_num = lenum.lana[i]; 
                    uRetCode = Win32API.Netbios(ref Ncb); 
                    if (uRetCode != (short)NCBCONST.NRC_GOODRET) 
                        return "";

                    Ncb.ncb_command = (byte)NCBCONST.NCBASTAT; 
                    Ncb.ncb_lana_num = lenum.lana[i]; 
                    Ncb.ncb_callname[0] = (byte)'*'; 
                    cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF; 
                    Ncb.ncb_buffer = Marshal.AllocHGlobal(cb); 
                    Ncb.ncb_length = (ushort)cb; 
                    uRetCode = Win32API.Netbios(ref Ncb); 
                    adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS)); 
                    Marshal.FreeHGlobal(Ncb.ncb_buffer);

                    if (uRetCode == (short)NCBCONST.NRC_GOODRET) 
                    { 
                        if (i > 0) 
                            addr += ":"; 
                        addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}", 
                         adapter.adapt.adapter_address[0], 
                         adapter.adapt.adapter_address[1], 
                         adapter.adapt.adapter_address[2], 
                         adapter.adapt.adapter_address[3], 
                         adapter.adapt.adapter_address[4], 
                         adapter.adapt.adapter_address[5]); 
                    } 
                } 
            } 
            catch 
            { } 
            return addr.Replace(' ', '0'); 
        } 
    } 

 

使用方法举例:

view plaincopy to clipboardprint?
//获取硬盘序列号    
Hardware.HardwareInfo hardwareInfo = new Hardware.HardwareInfo();    
string hardDiskID = hardwareInfo.GetHardDiskID();    
System.Console.WriteLine(hardDiskID);    
  
//获取CPU序列号    
string cpuID = hardwareInfo.GetCpuID();    
System.Console.WriteLine(cpuID);    
//获取硬盘序列号Hardware.HardwareInfo hardwareInfo = new Hardware.HardwareInfo();string hardDiskID = hardwareInfo.GetHardDiskID();System.Console.WriteLine(hardDiskID);//获取CPU序列号string cpuID = hardwareInfo.GetCpuID();System.Console.WriteLine(cpuID); 


本文转载自CSDN博客,http://blog.csdn.net/songkexin/archive/2009/12/01/4916602.aspx



本文转自破狼博客园博客,原文链接:http://www.cnblogs.com/whitewolf/archive/2009/12/11/1622256.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
计算机基础-------硬盘、内存、cpu的理解
计算机基础-------硬盘、内存、cpu的理解
40 0
服务器分类、CPU、硬盘和系统| 学习笔记
快速学习服务器分类、CPU、硬盘和系统
147 0
你还不懂硬盘,内存和CPU的关系 ?(程序员入门)
你好我是辰兮,很高兴你能来阅读,本篇文章小结了硬盘,内存和CPU的关系,献给初学者,分享获取新知,大家共同进步。
312 0
天啦噜!知道硬盘很慢,但没想到比 CPU Cache 慢 10000000 倍
存储器的层次结构、层次关系、存储器之间的实际价格和性能差距
62 0
硬盘大佬也玩CPU!西部数据公布RISC-V自研架构SweRV及开源指令集模拟器
西部数据预计硬件和软件将用于大数据和快速数据应用的各种解决方案,包括闪存控制器和SSD。
461 0
C#/VB.NET 获取电脑属性(硬盘ID、硬盘容量、Cpu序列号、MAC地址、系统类型)
原文:C#/VB.NET 获取电脑属性(硬盘ID、硬盘容量、Cpu序列号、MAC地址、系统类型) 在开发过程中,经常需要获取电脑的一些属性,如获取硬盘ID/CPU序列号/MAC地址作为来加密字符串。 1、硬盘 在我查看网上一些文档时,发现很多人对硬盘序列号很模糊~ 什么叫硬盘序列号?指的是作为一个硬盘的标识;但是有时候发现,同事的电脑硬盘序列号有重复的。
1230 0
4核CPU 4G内存 500G硬盘 8M宽带 这样的配置 要租赁云服务器 一年费用大概多少
4核CPU 4G内存 500G硬盘 8M宽带 这样的配置 要租赁云服务器 一年费用大概多少 在阿里云官网上有,可以自动计算价格的。 你按照如下链接选择配置,系统会自动结算哈 https://s.
3163 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
RDS SQL Server CPU高使用率性能优化
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载