时间:2021-05-02
本文在ASP.NET程序中实现了获取CPU编号、硬盘编号等与系统有关环境属性,这个方法也可以移植到其他程序当中。
CpuInfo.cs
using System;using System.Configuration;using System.Runtime.InteropServices;
/*** LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序* 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。* LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序* LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。*//// <summary>/// 定义CPU的信息结构/// </summary>[StructLayout(LayoutKind.Sequential)] public struct CpuInfo...{ /// <summary> /// OEM ID /// </summary> public uint dwOemId; /// <summary> /// 页面大小 /// </summary> public uint dwPageSize; public uint lpMinimumApplicationAddress; public uint lpMaximumApplicationAddress; public uint dwActiveProcessorMask; /// <summary> /// CPU个数 /// </summary> public uint dwNumberOfProcessors; /// <summary> /// CPU类型 /// </summary> public uint dwProcessorType; public uint dwAllocationGranularity; /// <summary> /// CPU等级 /// </summary> public uint dwProcessorLevel; public uint dwProcessorRevision; }MemoryInfo.csusing System;using System.Configuration;using System.Runtime.InteropServices;
/*** LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序* 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。* LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序* LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。*//// <summary>/// 定义内存的信息结构/// </summary>[StructLayout(LayoutKind.Sequential)]public struct MemoryInfo...{ /// <summary> /// /// </summary> public uint dwLength; /// <summary> /// 已经使用的内存 /// </summary> public uint dwMemoryLoad; /// <summary> /// 总物理内存大小 /// </summary> public uint dwTotalPhys; /// <summary> /// 可用物理内存大小 /// </summary> public uint dwAvailPhys; /// <summary> /// 交换文件总大小 /// </summary> public uint dwTotalPageFile; /// <summary> /// 可用交换文件大小 /// </summary> public uint dwAvailPageFile; /// <summary> /// 总虚拟内存大小 /// </summary> public uint dwTotalVirtual; /// <summary> /// 可用虚拟内存大小 /// </summary> public uint dwAvailVirtual;}SystemTimeInfo.csusing System;using System.Configuration;using System.Runtime.InteropServices;
/*** LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序* 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。* LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序* LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。*//// <summary>/// 定义系统时间的信息结构/// </summary>[StructLayout(LayoutKind.Sequential)] public struct SystemTimeInfo...{ /// <summary> /// 年 /// </summary> public ushort wYear; /// <summary> /// 月 /// </summary> public ushort wMonth; /// <summary> /// 星期 /// </summary> public ushort wDayOfWeek; /// <summary> /// 天 /// </summary> public ushort wDay; /// <summary> /// 小时 /// </summary> public ushort wHour; /// <summary> /// 分钟 /// </summary> public ushort wMinute; /// <summary> /// 秒 /// </summary> public ushort wSecond; /// <summary> /// 毫秒 /// </summary> public ushort wMilliseconds;}另外还定义了一个调用类SystemInfo.cs,代码如下:using System;using System.Configuration;using System.Runtime.InteropServices;using System.Management;using System.Text;
/// <summary>/// SystemInfo 的摘要说明/// </summary>public class SystemInfo...{ private const int CHAR_COUNT = 128; public SystemInfo() ...{ } [DllImport("kernel32")] private static extern void GetWindowsDirectory(StringBuilder WinDir, int count);
[DllImport("kernel32")] private static extern void GetSystemDirectory(StringBuilder SysDir, int count);
[DllImport("kernel32")] private static extern void GetSystemInfo(ref CpuInfo cpuInfo);
[DllImport("kernel32")] private static extern void GlobalMemoryStatus(ref MemoryInfo memInfo);
[DllImport("kernel32")] private static extern void GetSystemTime(ref SystemTimeInfo sysInfo);
/// <summary> /// 查询CPU编号 /// </summary> /// <returns></returns> public string GetCpuId() ...{ ManagementClass mClass = new ManagementClass("Win32_Processor"); ManagementObjectCollection moc = mClass.GetInstances(); string cpuId=null; foreach (ManagementObject mo in moc) ...{ cpuId = mo.Properties["ProcessorId"].Value.ToString(); break; } return cpuId; }
/// <summary> /// 查询硬盘编号 /// </summary> /// <returns></returns> public string GetMainHardDiskId() ...{ ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"); String hardDiskID=null; foreach (ManagementObject mo in searcher.Get()) ...{ hardDiskID = mo["SerialNumber"].ToString().Trim(); break; } return hardDiskID; }
/// <summary> /// 获取Windows目录 /// </summary> /// <returns></returns> public string GetWinDirectory() ...{ StringBuilder sBuilder = new StringBuilder(CHAR_COUNT); GetWindowsDirectory(sBuilder, CHAR_COUNT); return sBuilder.ToString(); }
/// <summary> /// 获取系统目录 /// </summary> /// <returns></returns> public string GetSysDirectory() ...{ StringBuilder sBuilder = new StringBuilder(CHAR_COUNT); GetSystemDirectory(sBuilder, CHAR_COUNT); return sBuilder.ToString(); }
/// <summary> /// 获取CPU信息 /// </summary> /// <returns></returns> public CpuInfo GetCpuInfo() ...{ CpuInfo cpuInfo = new CpuInfo(); GetSystemInfo(ref cpuInfo); return cpuInfo; }
/// <summary> /// 获取系统内存信息 /// </summary> /// <returns></returns> public MemoryInfo GetMemoryInfo() ...{ MemoryInfo memoryInfo = new MemoryInfo(); GlobalMemoryStatus(ref memoryInfo); return memoryInfo; }
/// <summary> /// 获取系统时间信息 /// </summary> /// <returns></returns> public SystemTimeInfo GetSystemTimeInfo() ...{ SystemTimeInfo systemTimeInfo = new SystemTimeInfo(); GetSystemTime(ref systemTimeInfo); return systemTimeInfo; }
/// <summary> /// 获取系统名称 /// </summary> /// <returns></returns> public string GetOperationSystemInName() ...{ OperatingSystem os = System.Environment.OSVersion; string osName = "UNKNOWN"; switch (os.Platform) ...{ case PlatformID.Win32Windows: switch (os.Version.Minor) ...{ case 0: osName = "Windows 95"; break; case 10: osName = "Windows 98"; break; case 90: osName = "Windows ME"; break; } break; case PlatformID.Win32NT: switch (os.Version.Major) ...{ case 3: osName = "Windws NT 3.51"; break; case 4: osName = "Windows NT 4"; break; case 5: if (os.Version.Minor == 0) ...{ osName = "Windows 2000"; } else if (os.Version.Minor == 1) ...{ osName = "Windows XP"; } else if (os.Version.Minor == 2) ...{ osName = "Windows Server 2003"; } break; case 6: osName = "Longhorn"; break; } break; } return String.Format("{0},{1}", osName, os.Version.ToString()); }}以下是调用实例,为了简单,我在一个aspx页面中输出,不过这个程序可以在WinForm中调用:using System;using System.Data;using System.Configuration;using System.Collections;using System.Collections.Specialized;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Runtime.InteropServices;
public partial class Index : System.Web.UI.Page...{ protected void Page_Load(object sender, EventArgs e) ...{ if (!Page.IsPostBack) ...{ SystemInfo systemInfo = new SystemInfo(); Response.Write("操作系统:" + systemInfo.GetOperationSystemInName() + "<br>"); Response.Write("CPU编号:"+systemInfo.GetCpuId() + "<br>"); Response.Write("硬盘编号:"+systemInfo.GetMainHardDiskId() + "<br>"); Response.Write("Windows目录所在位置:" + systemInfo.GetSysDirectory() + "<br>"); Response.Write("系统目录所在位置:" + systemInfo.GetWinDirectory() + "<br>"); MemoryInfo memoryInfo = systemInfo.GetMemoryInfo(); CpuInfo cpuInfo = systemInfo.GetCpuInfo(); Response.Write("dwActiveProcessorMask" + cpuInfo.dwActiveProcessorMask + "<br>"); Response.Write("dwAllocationGranularity" + cpuInfo.dwAllocationGranularity + "<br>"); Response.Write("CPU个数:" + cpuInfo.dwNumberOfProcessors + "<br>"); Response.Write("OEM ID:" + cpuInfo.dwOemId + "<br>"); Response.Write("页面大小" + cpuInfo.dwPageSize + "<br>"); Response.Write("CPU等级" + cpuInfo.dwProcessorLevel + "<br>"); Response.Write("dwProcessorRevision" + cpuInfo.dwProcessorRevision + "<br>"); Response.Write("CPU类型" + cpuInfo.dwProcessorType + "<br>"); Response.Write("lpMaximumApplicationAddress" + cpuInfo.lpMaximumApplicationAddress + "<br>"); Response.Write("lpMinimumApplicationAddress" + cpuInfo.lpMinimumApplicationAddress + "<br>"); Response.Write("CPU类型:" + cpuInfo.dwProcessorType + "<br>"); Response.Write("可用交换文件大小:" + memoryInfo.dwAvailPageFile + "<br>"); Response.Write("可用物理内存大小:" + memoryInfo.dwAvailPhys + "<br>"); Response.Write("可用虚拟内存大小" + memoryInfo.dwAvailVirtual + "<br>"); Response.Write("操作系统位数:" + memoryInfo.dwLength + "<br>"); Response.Write("已经使用内存大小:" + memoryInfo.dwMemoryLoad + "<br>"); Response.Write("交换文件总大小:" + memoryInfo.dwTotalPageFile + "<br>"); Response.Write("总物理内存大小:" + memoryInfo.dwTotalPhys + "<br>"); Response.Write("总虚拟内存大小:" + memoryInfo.dwTotalVirtual + "<br>"); } }}说明:前台aspx页面没有任何控件。
本文源自:翔宇亭——IT乐园(http://www.biye5u.com),转载请保留此信息!声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#获取CPU编号的方法。分享给大家供大家参考。具体如下://////Getsthecpu编号.///需引用 usingSystem.Manage
本文实例讲述了C#编程获取各种电脑硬件信息的方法。分享给大家供大家参考,具体如下:获取CPU编号:ManagementClassmc=newManagement
本文实例讲述了C#获取硬盘编号的方法。分享给大家供大家参考。具体实现方法如下:ManagementClassmc=newManagementClass("Win
//////获取CPU的编号//////CPU的编号publicstaticListGetCPUID(){ListlstInfo=newList();Manag
本文实例讲述了C#获取运行平台系统信息的方法,主要可以实现C#获取系统启动经过的毫秒数,相连网络域名,系统启动经过的毫秒数等,并有关于ListView控件的相关