应天论坛

 找回密码
 参与我们

QQ登录

只需一步,快速开始

搜索
查看: 862|回复: 0

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

[复制链接]

276

主题

303

帖子

3197

积分

管理员

湘南小侠客

Rank: 9Rank: 9Rank: 9

积分
3197

优质服务勋章论坛元老

QQ
发表于 2017-5-23 00:05:03 | 显示全部楼层 |阅读模式
首先需添加对System.Management的引用。

[mw_shl_code=csharp,true]using System;   
using System.Runtime.InteropServices;   
using System.Management;   
  
namespace Hardware   
{   
    /// <summary>   
    /// HardwareInfo 的摘要说明。   
    /// </summary>   
    public class HardwareInfo   
    {   
        //取机器名   
        public string GetHostName()   
        {   
            return System<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.NET</a>.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;   
                    uRetCode = Win32API.Netbios(ref Ncb);   
                    if (uRetCode != (short)NCBCONST.NRC_GOODRET)   
                        return "";   
  
                    Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;   
                    Ncb.ncb_lana_num = lenum.lana;   
                    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');   
        }   
    }   
}   [/mw_shl_code]

使用方法举例:
[mw_shl_code=csharp,true]//获取硬盘序列号   
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);  [/mw_shl_code]
每次见你穿短裤打领带,还穿个拖鞋,下次再这样穿不要从我家门口过了!
http://gsh.yzqz.cn/CassettePlayer/index.html

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 参与我们

本版积分规则

QQ|Archiver|手机版|小黑屋|应天社区 ( 湘ICP备17015224号 )

GMT+8, 2024-12-22 18:37 , Processed in 0.078125 second(s), 28 queries .

Powered by Discuz!

© 2001-2017 Comsenz Inc.


免责声明:
本站所发布的第三方软件及资源(包括但不仅限于文字/图片/音频/视频等仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢某程序或某个资源,请支持正版软件及版权方利益,注册或购买,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To: admin@yzqz.cn

快速回复 返回顶部 返回列表