📄 sysinfo.cs
字号:
using System;
using System.Net;
using System.Net.Sockets;
using System.Management;
using System.Runtime.InteropServices;
using System.Text;
using System.Web.UI;
namespace WWAM.SysInfo
{
/// <summary>
/// 硬件信息类
/// </summary>
public class HardWare
{
#region WEB服务器 / WinForm本机
/// <summary>
/// WEB服务器主机名
/// WinForm本机IP地址
/// </summary>
public static string HostName
{
get
{
return(Dns.GetHostName());
}
}
public static IPAddress IP
{
get
{
return Dns.Resolve(HostName).AddressList[0];
}
}
/// <summary>
/// WEB服务器IP地址
/// WinForm本机IP地址
/// </summary>
public static string IPString
{
get
{
string ip="";
IPAddress[] addressList = Dns.Resolve(HostName).AddressList;
for(int i=0;i<addressList.Length;i++)
{
if(i>3)break;
ip+=addressList[i].ToString();
}
return(ip);
}
}
/// <summary>
/// WEB服务器MAC地址 17位(xx:xx:xx:xx:xx:xx) 耗时0.02-0.04秒
/// WinForm本机MAC地址
/// </summary>
public static string MAC
{
get
{
string mac="";
ManagementClass mc;
mc=new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc=mc.GetInstances();
foreach(ManagementObject mo in moc)
{
if(mo["IPEnabled"].ToString()=="True")
mac=mo["MacAddress"].ToString();
}
return(mac);
}
}
#endregion
#region Web客户端
[DllImport("Iphlpapi.dll")]
private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
[DllImport("Ws2_32.dll")]
private static extern Int32 inet_addr(string ip);
public static string WebHostName(Page page)
{
return page.Request.UserHostName;
}
public static string WebClientIP(Page page)
{
return page.Request.UserHostAddress;
}
public static string WebClientMAC(Page page)
{
string IP = page.Request.UserHostAddress;
Int32 ldest = inet_addr(IP);
Int64 macinfo = new Int64();
Int32 len = 6;
try
{
SendARP(ldest,0,ref macinfo,ref len);
}
catch
{
return "NULL";
}
string strmac=Convert.ToString(macinfo,16);
if(strmac.Length<12)
{
strmac = strmac.PadLeft(12,'0');
}
string macAddress;
if(strmac!="0000"&&strmac.Length==12)
{
macAddress = strmac;
}
else
{
macAddress = "NULL";
}
return macAddress = macAddress.ToUpper();
}
#endregion
#region WinFrom本机信息
/// <summary>
/// CPU序列号 16位 耗时1秒
/// </summary>
public static string CPU_Serial
{
get
{
return(GetWMIInfo("win32_Processor","ProcessorId"));
}
}
/// <summary>
/// CPU名称
/// </summary>
public static string CPU_Name
{
get
{
return(GetWMIInfo("win32_Processor","Name"));
}
}
/// <summary>
/// CPU最高频率 (单位:MHz)
/// </summary>
public static string CPU_MaxClockSpeed
{
get
{
return(GetWMIInfo("win32_Processor","MaxClockSpeed"));
}
}
/// <summary>
/// CPU当前频率 (单位:MHz)
/// </summary>
public static string CPU_CurrentClockSpeed
{
get
{
return(GetWMIInfo("win32_Processor","CurrentClockSpeed"));
}
}
/// <summary>
/// 硬盘序列号
/// </summary>
public static string HardDisk_Serial
{
get
{
HardDiskInfo hdd = AtapiDevice.GetHddInfo(0);
return(hdd.SerialNumber);
}
}
/// <summary>
/// 硬盘型号
/// </summary>
public static string HardDisk_Moule
{
get
{
HardDiskInfo hdd = AtapiDevice.GetHddInfo(0);
return(hdd.ModuleNumber);
}
}
/// <summary>
/// 硬盘固件版本
/// </summary>
public static string HardDisk_Firmware
{
get
{
HardDiskInfo hdd = AtapiDevice.GetHddInfo(0);
return(hdd.Firmware);
}
}
/// <summary>
/// 硬盘容量 (单位 MB)
/// </summary>
public static uint HardDisk_Capacity
{
get
{
HardDiskInfo hdd = AtapiDevice.GetHddInfo(0);
return(hdd.Capacity);
}
}
/// <summary>
/// 内存容量 (单位 MB)
/// </summary>
public static string Memory_Capacity
{
get
{
string s=GetWMIInfo("win32_PhysicalMemory","Capacity");
int i = (Convert.ToInt32(s))/1024/1024;
return(i.ToString());
}
}
#endregion
#region WMI对象属性信息获取
private static string GetWMIInfo(string wmiClassName, string wmiObejctName)
{
string restr="";
ManagementClass mc = new ManagementClass(wmiClassName);
ManagementObjectCollection moc = mc.GetInstances();
try
{
foreach(ManagementObject m in moc)
{
restr = m[wmiObejctName].ToString();
}
}
catch
{
restr="Error Information!";
}
return(restr);
}
#endregion
#region HardDiskInfo 参照代码 (调用API)
/// <summary>
/// 硬盘信息
/// </summary>
[Serializable]
private struct HardDiskInfo
{
/// <summary>
/// 型号
/// </summary>
public string ModuleNumber;
/// <summary>
/// 固件版本
/// </summary>
public string Firmware;
/// <summary>
/// 序列号
/// </summary>
public string SerialNumber;
/// <summary>
/// 容量,以M为单位
/// </summary>
public uint Capacity;
}
#region Internal Structs
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct GetVersionOutParams
{
public byte bVersion;
public byte bRevision;
public byte bReserved;
public byte bIDEDeviceMap;
public uint fCapabilities;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=4)]
public uint[] dwReserved; // For future use.
}
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct IdeRegs
{
public byte bFeaturesReg;
public byte bSectorCountReg;
public byte bSectorNumberReg;
public byte bCylLowReg;
public byte bCylHighReg;
public byte bDriveHeadReg;
public byte bCommandReg;
public byte bReserved;
}
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct SendCmdInParams
{
public uint cBufferSize;
public IdeRegs irDriveRegs;
public byte bDriveNumber;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
public byte[] bReserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=4)]
public uint[] dwReserved;
public byte bBuffer;
}
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct DriverStatus
{
public byte bDriverError;
public byte bIDEStatus;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=2)]
public byte[] bReserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=2)]
public uint[] dwReserved;
}
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct SendCmdOutParams
{
public uint cBufferSize;
public DriverStatus DriverStatus;
public IdSector bBuffer;
}
[StructLayout(LayoutKind.Sequential, Pack=1, Size=512)]
internal struct IdSector
{
public ushort wGenConfig;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -