{"id":42,"date":"2008-02-09T19:38:09","date_gmt":"2008-02-09T19:38:09","guid":{"rendered":""},"modified":"2008-02-09T19:38:09","modified_gmt":"2008-02-09T19:38:09","slug":"42","status":"publish","type":"post","link":"https:\/\/www.poloo.org\/?p=42","title":{"rendered":"C#\u5982\u4f55\u53d6\u786c\u4ef6\u6807\u5fd7"},"content":{"rendered":"<p>C#\u5982\u4f55\u53d6\u786c\u4ef6\u6807\u5fd7<br \/><code>using System;<br \/>using System.Runtime.InteropServices;<br \/>using System.Management;<br \/>namespace Hardware<br \/>{<br \/>\/\/\/ &lt;summary&gt;<br \/>\/\/\/ Hardware_Mac \u7684\u6458\u8981\u8bf4\u660e\u3002<br \/>\/\/\/ &lt;\/summary&gt;<br \/>public class HardwareInfo<br \/>{<br \/>\/\/\u53d6\u673a\u5668\u540d <br \/>public string GetHostName()<br \/>{<br \/>return System.Net.Dns.GetHostName(); <br \/>} <\/p>\n<p>\/\/\u53d6CPU\u7f16\u53f7<br \/>ublic String GetCpuID() <br \/>{<br \/>try<br \/>{<br \/>ManagementClass mc = new ManagementClass(\"Win32_Processor\");<br \/>ManagementObjectCollection moc = mc.GetInstances();<\/p>\n<p>String strCpuID = null ;<br \/>foreach( ManagementObject mo in moc ) <br \/>{<br \/>strCpuID = mo.Properties[\"ProcessorId\"].Value.ToString();<br \/>break; <br \/>}<br \/>return strCpuID;<br \/>}<br \/>catch<br \/>{<br \/>return \"\";<br \/>}<\/p>\n<p>}\/\/end method<\/p>\n<p>\/\/\u53d6\u7b2c\u4e00\u5757\u786c\u76d8\u7f16\u53f7<\/p>\n<p>public String GetHardDiskID() <br \/>{<br \/>try<br \/>{<br \/>ManagementObjectSearcher searcher = new ManagementObjectSearcher(\"Select * FROM Win32_PhysicalMedia\");<br \/>String strHardDiskID = null ;<br \/>foreach(ManagementObject mo in searcher.Get()) <br \/>{ <br \/>strHardDiskID = mo[\"SerialNumber\"].ToString().Trim();<br \/>break; <br \/>}<br \/>return strHardDiskID ;<br \/>}<br \/>catch<br \/>{<br \/>return \"\";<br \/>}<br \/>}\/\/end <\/p>\n<p>public enum NCBCONST <br \/>{ <br \/>NCBNAMSZ =16, \/* absolute length of a net name *\/ <br \/>MAX_LANA =254, \/* lana's in range 0 to MAX_LANA inclusive *\/ <br \/>NCBENUM =0x37, \/* NCB ENUMERATE LANA NUMBERS *\/ <br \/>NRC_GOODRET =0x00, \/* good return *\/ <br \/>NCBRESET =0x32, \/* NCB RESET *\/ <br \/>NCBASTAT =0x33, \/* NCB ADAPTER STATUS *\/ <br \/>NUM_NAMEBUF =30, \/* Number of NAME's BUFFER *\/ <br \/>} <\/p>\n<p>[StructLayout(LayoutKind.Sequential)] <br \/>public struct ADAPTER_STATUS <br \/>{ <br \/>[MarshalAs(UnmanagedType.ByValArray, SizeConst=6)] <br \/>public byte[] adapter_address; <br \/>public byte rev_major; <br \/>public byte reserved0; <br \/>public byte adapter_type; <br \/>public byte rev_minor; <br \/>public ushort duration; <br \/>public ushort frmr_recv; <br \/>public ushort frmr_xmit; <br \/>public ushort iframe_recv_err; <br \/>public ushort xmit_aborts; <br \/>public uint xmit_success; <br \/>public uint recv_success; <br \/>public ushort iframe_xmit_err; <br \/>public ushort recv_buff_unavail; <br \/>public ushort t1_timeouts; <br \/>public ushort ti_timeouts; <br \/>public uint reserved1; <br \/>public ushort free_ncbs; <br \/>public ushort max_cfg_ncbs; <br \/>public ushort max_ncbs; <br \/>public ushort xmit_buf_unavail; <br \/>public ushort max_dgram_size; <br \/>public ushort pending_sess; <br \/>public ushort max_cfg_sess; <br \/>public ushort max_sess; <br \/>public ushort max_sess_pkt_size; <br \/>public ushort name_count; <br \/>} <\/p>\n<p>[StructLayout(LayoutKind.Sequential)] <br \/>public struct NAME_BUFFER <br \/>{ <br \/>[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] <br \/>public byte[] name; <br \/>public byte name_num; <br \/>public byte name_flags; <br \/>} <\/p>\n<p>[StructLayout(LayoutKind.Sequential)] <br \/>public struct NCB <br \/>{ <br \/>public byte ncb_command; <br \/>public byte ncb_retcode; <br \/>public byte ncb_lsn; <br \/>public byte ncb_num; <br \/>public IntPtr ncb_buffer; <br \/>public ushort ncb_length; <br \/>[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] <br \/>public byte[] ncb_callname; <br \/>[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] <br \/>public byte[] ncb_name; <br \/>public byte ncb_rto; <br \/>public byte ncb_sto; <br \/>public IntPtr ncb_post; <br \/>public byte ncb_lana_num; <br \/>public byte ncb_cmd_cplt; <br \/>[MarshalAs(UnmanagedType.ByValArray, SizeConst=10)] <br \/>public byte[] ncb_reserve; <br \/>public IntPtr ncb_event; <br \/>} <\/p>\n<p>[StructLayout(LayoutKind.Sequential)] <br \/>public struct LANA_ENUM <br \/>{ <br \/>public byte length; <br \/>[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)] <br \/>public byte[] lana; <br \/>} <\/p>\n<p>[StructLayout(LayoutKind.Auto)] <br \/>public struct ASTAT <br \/>{ <br \/>public ADAPTER_STATUS adapt; <br \/>[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)] <br \/>public NAME_BUFFER[] NameBuff; <br \/>} <br \/>public class Win32API <br \/>{ <br \/>[DllImport(\"NETAPI32.DLL\")] <br \/>public static extern char Netbios(ref NCB ncb); <br \/>} <\/p>\n<p>public string GetMacAddress() <br \/>{ <br \/>string addr=\"\"; <br \/>try<br \/>{<br \/>int cb; <br \/>ASTAT adapter; <br \/>NCB Ncb=new NCB(); <br \/>char uRetCode; <br \/>LANA_ENUM lenum; <\/p>\n<p>Ncb.ncb_command = (byte)NCBCONST.NCBENUM; <br \/>cb = Marshal.SizeOf(typeof(LANA_ENUM)); <br \/>Ncb.ncb_buffer = Marshal.AllocHGlobal(cb); <br \/>Ncb.ncb_length = (ushort)cb; <br \/>uRetCode = Win32API.Netbios(ref Ncb); <br \/>lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM)); <br \/>Marshal.FreeHGlobal(Ncb.ncb_buffer); <br \/>if(uRetCode != (short)NCBCONST.NRC_GOODRET) <br \/>return \"\"; <\/p>\n<p>for(int i=0; i &lt; lenum.length ;i++) <br \/>{ <br \/>Ncb.ncb_command = (byte)NCBCONST.NCBRESET; <br \/>Ncb.ncb_lana_num = lenum.lana[i]; <br \/>uRetCode = Win32API.Netbios(ref Ncb); <br \/>if(uRetCode != (short)NCBCONST.NRC_GOODRET) <br \/>return \"\"; <\/p>\n<p>Ncb.ncb_command = (byte)NCBCONST.NCBASTAT; <br \/>Ncb.ncb_lana_num = lenum.lana[i]; <br \/>Ncb.ncb_callname[0]=(byte)'*'; <br \/>cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER))*(int)NCBCONST.NUM_NAMEBUF; <br \/>Ncb.ncb_buffer = Marshal.AllocHGlobal(cb); <br \/>Ncb.ncb_length = (ushort)cb; <br \/>uRetCode = Win32API.Netbios(ref Ncb); <br \/>adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS)); <br \/>Marshal.FreeHGlobal(Ncb.ncb_buffer); <\/p>\n<p>if (uRetCode == (short)NCBCONST.NRC_GOODRET) <br \/>{ <br \/>if(i&gt;0) <br \/>addr += \":\"; <br \/>addr = string.Format(\"{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}\", <br \/>adapter.adapt.adapter_address[0], <br \/>adapter.adapt.adapter_address[1], <br \/>adapter.adapt.adapter_address[2], <br \/>adapter.adapt.adapter_address[3], <br \/>adapter.adapt.adapter_address[4], <br \/>adapter.adapt.adapter_address[5]); <br \/>} <br \/>} <br \/>}<br \/>catch<br \/>{}<br \/>return addr.Replace(' ', '0'); <br \/>} <\/p>\n<p>}<br \/>}<br \/><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>C#\u5982\u4f55\u53d6\u786c\u4ef6\u6807\u5fd7using System;using System&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-42","post","type-post","status-publish","format-standard","hentry","category-NET"],"_links":{"self":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts\/42","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=42"}],"version-history":[{"count":0,"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts\/42\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=42"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=42"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=42"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}