using System;
using System.Runtime.InteropServices;
using System.Management;
namespace Hardware
{
/// <summary>
/// Hardware_Mac 的摘要说明。
/// </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');
}
}
}
分享到:
相关推荐
根据提供的文件信息,本文将详细解释如何在C#中获取硬件标识符,包括主机名、CPU标识符以及硬盘标识符等内容。这些标识符通常用于识别特定的计算机硬件配置,对于软件授权、设备管理等方面有着重要的作用。 ### ...
在C#中,可以使用以下方法获取: ```csharp using System.Net.NetworkInformation; // 获取网卡的第一个MAC地址 PhysicalAddress macAddress = NetworkInterface.GetAllNetworkInterfaces() .FirstOrDefault(n =>...
使用C#代码取得 取机器名 取CPU编号 获取硬盘序列号 获取MAC和ID
如何取硬件标志.txt 如何让应用程序只有一个实例运行.txt 如何如何插入照片到Excel.txt 如何识别键盘左右的shift,Ctrl或Alt键.txt 如何水晶按钮的程序生成.txt 如何为DataGrid添加下拉列表框.txt 如何用C#在...
如何取硬件标志.txt 如何让应用程序只有一个实例运行.txt 如何如何插入照片到Excel.txt 如何识别键盘左右的shift,Ctrl或Alt键.txt 如何水晶按钮的程序生成.txt 如何为DataGrid添加下拉列表框.txt 如何用C#在...
选择哪个版本并不关键,因为它们的基本操作相似,主要取决于个人计算机的配置。Visual Studio 2010对硬件要求较高,若电脑性能允许,可以选择该版本;否则,2008版是更经济的选择。 Web开发的学习路径应遵循一定的...
首先,我们可以从计算机的历史开始,1946年2月15日,ENIAC的诞生标志着电子计算机时代的开启。从第一代的电子管计算机到第四代的大规模、超大规模集成电路计算机,计算机在速度、精度、存储能力、逻辑判断力和可靠性...
在51单片机中,复位后,SP(堆栈指针)的初始值通常为07H,PC(程序计数器)的值被清零,I/O口的初始状态取决于硬件设计。单片机有四个工作寄存器区,这些区域的切换由PSW(程序状态字)中的RS0和RS1两位的状态决定...
20世纪50年代至70年代,高级语言的出现标志着计算机语言的一次重大飞跃。高级语言更接近于人类的自然语言,使用的是英文单词和数学公式式的语句,使得编程更加符合人的思维习惯。C语言作为高级语言的代表,不仅广泛...
22. 计算机程序设计语言:Java、C++、C#等都是高级语言,而机器语言是直接对应硬件的低级语言。 23. 数据通信系统模型:由数据源、数据通信网和数据宿三部分组成。 24. RAM特点:RAM是随机存取存储器,可以读写,...
计算机应用基础涵盖了许多关键知识点,这些知识是理解和使用...总的来说,计算机应用基础是理解现代信息技术的基础,涵盖硬件、软件、网络、数据库和编程等多个方面,这些知识对于日常生活和工作中使用计算机至关重要。
1. **计算机历史**:1946年2月15日,ENIAC(埃尼阿克)在美国宾夕法尼亚大学诞生,标志着电子计算机的诞生。计算机经历了电子管、晶体管、集成电路以及大规模和超大规模集成电路四个主要发展阶段,性能不断提升,...
7. 分辨率与颜色数:计算机中的分辨率和颜色数由显示卡设定,但实际显示效果取决于显示器的性能。 8. 第二代计算机元件:第二代电子计算机主要采用晶体管作为元件,取代了第一代的真空管。 9. 文本框属性:文本框...
在ESRI开发用户大会中,Silverlight API(ArcGIS API for Silverlight)的发布标志着GIS技术与Web应用深度融合的新篇章。通过学习和运用Silverlight API,开发者能够构建既功能强大又用户体验优秀的GIS Web应用,...
- **数据位(Data Bits)**:实际传输的数据位数,可以是5、6、7或8位,具体取决于通信协议。 - **停止位(Stop Bit)**:标志数据帧的结束,可以是1位、1.5位或2位。 - **波特率(Baud Rate)**:表示数据传输的速度,...
| 0 | 开始标志位 | v1.0:0xFE (v0.9:0x55) | 用于标识一个有效的MavLink数据包 | | 1 | 载荷长度 | 0~255 | 表示有效载荷的长度 | | 2 | 数据包序列号 | 0~255 | 每个组件对其发送序列计数,允许丢包检查 | | 3 | ...
**解释**:在 Java 或 C# 等面向对象的语言中,集合只能存储引用类型的数据,而不是基本数据类型。例如,在 Java 中,集合只能存储 `Integer` 而不是 `int`。 **示例**:题目中的说法“集合中不能存放基本数据类型...
同时,由于 Java、C# 等语言的兴起和硬件成本的下降,C++ 在用户级程序开发领域的地位逐渐被替代,更多地转向系统级别的程序开发。 3. **第三阶段(2000年至今)**:产生了许多新的编程技术和库,例如 Loki、MPL 等...
- **B 项正确解析**:第二代电子计算机(大约1956年至1963年)使用晶体管作为主要逻辑元件,这标志着从第一代使用电子管的计算机向更高效、更小型化的技术转变。 ### 5. ASP.NET 支持的语言 **题目内容:** 以下哪...