比这篇新的文章: test
比这篇旧的文章: 合并水果问题--- 求最小体力消耗----贪心算法(简单的贪心问题)

C#如何取硬件标志代码

语言: C#, 标签: 标志 C# 代码 硬件 如何 2008/09/05发布 2个月前更新
作者: 小僧空尽, 点击271次, 评论(0), 收藏者(0)

开关行号, 全选(Ctrl+C复制) | 一键复制:HTML, BBCode(Discuz!) , 源代码 | 查看:裸代码, 全屏
背景
主题: 字体:
C#语言: C#如何取硬件标志代码
001 using System;
002 using System.Runtime.InteropServices;
003 using System.Management;
004 namespace Hardware
005 {
006 /// <summary>
007 /// Hardware_Mac 的摘要说明。
008 /// </summary>
009 public class HardwareInfo
010 {
011 //取机器名
012 public string GetHostName()
013 {
014 return System.Net.Dns.GetHostName();
015 }
016
017 //取cpu编号
018 public String GetCpuID()
019 {
020 try
021 {
022 ManagementClass mc = new ManagementClass("Win32_Processor");
023 ManagementObjectCollection moc = mc.GetInstances();
024
025 String strCpuID = null ;
026 foreach( ManagementObject mo in moc )
027 {
028 strCpuID = mo.Properties["ProcessorId"].Value.ToString();
029 break;
030 }
031 return strCpuID;
032 }
033 catch
034 {
035 return "";
036 }
037
038 }//end method
039
040 //取第一块硬盘编号
041 public String GetHardDiskID()
042 {
043 try
044 {
045 ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
046 String strHardDiskID = null ;
047 foreach(ManagementObject mo in searcher.Get())
048 {
049 strHardDiskID = mo["SerialNumber"].ToString().Trim();
050 break;
051 }
052 return strHardDiskID ;
053 }
054 catch
055 {
056 return "";
057 }
058 }//end
059
060 public enum NCBCONST
061 {
062 NCBNAMSZ =16, /* absolute length of a net name */
063 MAX_LANA =254, /* lana's in range 0 to MAX_LANA inclusive */
064 NCBENUM =0x37, /* NCB ENUMERATE LANA NUMBERS */
065 NRC_GOODRET =0x00, /* good return */
066 NCBRESET =0x32, /* NCB RESET */
067 NCBASTAT =0x33, /* NCB ADAPTER STATUS */
068 NUM_NAMEBUF =30, /* Number of NAME's BUFFER */
069 }
070
071 [structlayout(layoutkind.sequential)]
072 public struct ADAPTER_STATUS
073 {
074 [MarshalAs(UnmanagedType.ByValArray, SizeConst=6)]
075 public byte[] adapter_address;
076 public byte rev_major;
077 public byte reserved0;
078 public byte adapter_type;
079 public byte rev_minor;
080 public ushort duration;
081 public ushort frmr_recv;
082 public ushort frmr_xmit;
083 public ushort iframe_recv_err;
084 public ushort xmit_aborts;
085 public uint xmit_success;
086 public uint recv_success;
087 public ushort iframe_xmit_err;
088 public ushort recv_buff_unavail;
089 public ushort t1_timeouts;
090 public ushort ti_timeouts;
091 public uint reserved1;
092 public ushort free_ncbs;
093 public ushort max_cfg_ncbs;
094 public ushort max_ncbs;
095 public ushort xmit_buf_unavail;
096 public ushort max_dgram_size;
097 public ushort pending_sess;
098 public ushort max_cfg_sess;
099 public ushort max_sess;
100 public ushort max_sess_pkt_size;
101 public ushort name_count;
102 }
103
104 [structlayout(layoutkind.sequential)]
105 public struct NAME_BUFFER
106 {
107 [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]
108 public byte[] name;
109 public byte name_num;
110 public byte name_flags;
111 }
112
113 [structlayout(layoutkind.sequential)]
114 public struct NCB
115 {
116 public byte ncb_command;
117 public byte ncb_retcode;
118 public byte ncb_lsn;
119 public byte ncb_num;
120 public IntPtr ncb_buffer;
121 public ushort ncb_length;
122 [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]
123 public byte[] ncb_callname;
124 [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]
125 public byte[] ncb_name;
126 public byte ncb_rto;
127 public byte ncb_sto;
128 public IntPtr ncb_post;
129 public byte ncb_lana_num;
130 public byte ncb_cmd_cplt;
131 [MarshalAs(UnmanagedType.ByValArray, SizeConst=10)]
132 public byte[] ncb_reserve;
133 public IntPtr ncb_event;
134 }
135
136 [structlayout(layoutkind.sequential)]
137 public struct LANA_ENUM
138 {
139 public byte length;
140 [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)]
141 public byte[] lana;
142 }
143
144 [structlayout(layoutkind.auto)]
145 public struct ASTAT
146 {
147 public ADAPTER_STATUS adapt;
148 [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)]
149 public NAME_BUFFER[] NameBuff;
150 }
151 public class Win32API
152 {
153 [DllImport("NETAPI32.DLL")]
154 public static extern char Netbios(ref NCB ncb);
155 }
156
157 public string GetMacAddress()
158 {
159 string addr="";
160 try
161 {
162 int cb;
163 ASTAT adapter;
164 NCB Ncb=new NCB();
165 char uRetCode;
166 LANA_ENUM lenum;
167
168 ncb.ncb_command = (byte)NCBCONST.NCBENUM;
169 cb = Marshal.SizeOf(typeof(LANA_ENUM));
170 Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
171 Ncb.ncb_length = (ushort)cb;
172 uRetCode = Win32API.Netbios(ref Ncb);
173 lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
174 Marshal.FreeHGlobal(Ncb.ncb_buffer);
175 if(uRetCode != (short)NCBCONST.NRC_GOODRET)
176 return "";
177
178 for(int i=0; i < lenum.length ;i++)
179 {
180 Ncb.ncb_command = (byte)NCBCONST.NCBRESET;
181 Ncb.ncb_lana_num = lenum.lana[i];
182 uRetCode = Win32API.Netbios(ref Ncb);
183 if(uRetCode != (short)NCBCONST.NRC_GOODRET)
184 return "";
185
186 ncb.ncb_command = (byte)NCBCONST.NCBASTAT;
187 Ncb.ncb_lana_num = lenum.lana[i];
188 Ncb.ncb_callname[0]=(byte)'*';
189 cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER))*(int)NCBCONST.NUM_NAMEBUF;
190 Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
191 Ncb.ncb_length = (ushort)cb;
192 uRetCode = Win32API.Netbios(ref Ncb);
193 adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));
194 Marshal.FreeHGlobal(Ncb.ncb_buffer);
195
196 if (uRetCode == (short)NCBCONST.NRC_GOODRET)
197 {
198 if(i>0)
199 addr += ":";
200 addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",
201 adapter.adapt.adapter_address[0],
202 adapter.adapt.adapter_address[1],
203 adapter.adapt.adapter_address[2],
204 adapter.adapt.adapter_address[3],
205 adapter.adapt.adapter_address[4],
206 adapter.adapt.adapter_address[5]);
207 }
208 }
209 }
210 catch
211 {}
212 return addr.Replace(' ', '0');
213 }
214
215 }
216 }
打分:

所有评论,共0条:( 我也来说两句)


发表评论

注册登录后再发表评论