zoukankan      html  css  js  c++  java
  • 使用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/
    本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-个人独立博客博客园--破狼51CTO--破狼

  • 相关阅读:
    2020总结来了,文末有福利
    CentOS 用户请关注,你期待的 CentOS Linux 9 再也不会来了
    全球最好的10款波尔多葡萄酒,拉菲居然垫底
    eth以太坊合约开发工具集
    html格式的文字去掉html tag转为纯text文字
    如何隐藏X-Powered-By
    aiXcoder3.0呼之欲出,代码补全 AI,带你进入「个性化智能编程时代」
    windows故障群集修改心跳网卡【原创】
    keepalived非争抢机制不生效报错Received lower prio advert, forcing new election
    MySQL主从复制,启动slave时报错1872 Slave failed to initialize relay log info structure from the repository
  • 原文地址:https://www.cnblogs.com/whitewolf/p/1622256.html
Copyright © 2011-2022 走看看