`
380071587
  • 浏览: 479896 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用C#获取CPU编号、硬盘编号等系统有关环境、属性

 
阅读更多
如果利用C#获取系统有关环境和属性,这个也是在网上问得比较多的问题,不过大部分只有提问没有回答,最近正好想做有关方面的东西,整理了一下,提供给大家,希望能给大家提供参考意见:

首先需要定义几个结构(struct),便于DllImport作为返回参数调用。以下是代码:
CpuInfo.cs

usingSystem;
usingSystem.Configuration;
usingSystem.Runtime.InteropServices;

/**//**
*LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序
*注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
*LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
*LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
*/


/**////<summary>
///定义CPU的信息结构
///</summary>

[StructLayout(LayoutKind.Sequential)]
publicstructCpuInfo
...{
/**////<summary>
///OEMID
///</summary>

publicuintdwOemId;
/**////<summary>
///页面大小
///</summary>

publicuintdwPageSize;
publicuintlpMinimumApplicationAddress;
publicuintlpMaximumApplicationAddress;
publicuintdwActiveProcessorMask;
/**////<summary>
///CPU个数
///</summary>

publicuintdwNumberOfProcessors;
/**////<summary>
///CPU类型
///</summary>

publicuintdwProcessorType;
publicuintdwAllocationGranularity;
/**////<summary>
///CPU等级
///</summary>

publicuintdwProcessorLevel;
publicuintdwProcessorRevision;
}

MemoryInfo.cs
usingSystem;
usingSystem.Configuration;
usingSystem.Runtime.InteropServices;

/**//**
*LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序
*注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
*LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
*LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
*/

/**////<summary>
///定义内存的信息结构
///</summary>

[StructLayout(LayoutKind.Sequential)]
publicstructMemoryInfo
...{
/**////<summary>
///
///</summary>

publicuintdwLength;
/**////<summary>
///已经使用的内存
///</summary>

publicuintdwMemoryLoad;
/**////<summary>
///总物理内存大小
///</summary>

publicuintdwTotalPhys;
/**////<summary>
///可用物理内存大小
///</summary>

publicuintdwAvailPhys;
/**////<summary>
///交换文件总大小
///</summary>

publicuintdwTotalPageFile;
/**////<summary>
///可用交换文件大小
///</summary>

publicuintdwAvailPageFile;
/**////<summary>
///总虚拟内存大小
///</summary>

publicuintdwTotalVirtual;
/**////<summary>
///可用虚拟内存大小
///</summary>

publicuintdwAvailVirtual;
}

SystemTimeInfo.cs
usingSystem;
usingSystem.Configuration;
usingSystem.Runtime.InteropServices;

/**//**
*LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序
*注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
*LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
*LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
*/

/**////<summary>
///定义系统时间的信息结构
///</summary>

[StructLayout(LayoutKind.Sequential)]
publicstructSystemTimeInfo
...{
/**////<summary>
///
///</summary>

publicushortwYear;
/**////<summary>
///
///</summary>

publicushortwMonth;
/**////<summary>
///星期
///</summary>

publicushortwDayOfWeek;
/**////<summary>
///
///</summary>

publicushortwDay;
/**////<summary>
///小时
///</summary>

publicushortwHour;
/**////<summary>
///分钟
///</summary>

publicushortwMinute;
/**////<summary>
///
///</summary>

publicushortwSecond;
/**////<summary>
///毫秒
///</summary>

publicushortwMilliseconds;
}

另外还定义了一个调用类SystemInfo.cs,代码如下:
usingSystem;
usingSystem.Configuration;
usingSystem.Runtime.InteropServices;
usingSystem.Management;
usingSystem.Text;

/**////<summary>
///SystemInfo的摘要说明
///</summary>

publicclassSystemInfo
...{
privateconstintCHAR_COUNT=128;
publicSystemInfo()
...{

}

[DllImport(
"kernel32")]
privatestaticexternvoidGetWindowsDirectory(StringBuilderWinDir,intcount);

[DllImport(
"kernel32")]
privatestaticexternvoidGetSystemDirectory(StringBuilderSysDir,intcount);

[DllImport(
"kernel32")]
privatestaticexternvoidGetSystemInfo(refCpuInfocpuInfo);

[DllImport(
"kernel32")]
privatestaticexternvoidGlobalMemoryStatus(refMemoryInfomemInfo);

[DllImport(
"kernel32")]
privatestaticexternvoidGetSystemTime(refSystemTimeInfosysInfo);

/**////<summary>
///查询CPU编号
///</summary>
///<returns></returns>

publicstringGetCpuId()
...{
ManagementClassmClass
=newManagementClass("Win32_Processor");
ManagementObjectCollectionmoc
=mClass.GetInstances();
stringcpuId=null;
foreach(ManagementObjectmoinmoc)
...{
cpuId
=mo.Properties["ProcessorId"].Value.ToString();
break;
}

returncpuId;
}


/**////<summary>
///查询硬盘编号
///</summary>
///<returns></returns>

publicstringGetMainHardDiskId()
...{
ManagementObjectSearchersearcher
=newManagementObjectSearcher("SELECT*FROMWin32_PhysicalMedia");
StringhardDiskID
=null;
foreach(ManagementObjectmoinsearcher.Get())
...{
hardDiskID
=mo["SerialNumber"].ToString().Trim();
break;
}

returnhardDiskID;
}


/**////<summary>
///获取Windows目录
///</summary>
///<returns></returns>

publicstringGetWinDirectory()
...{
StringBuildersBuilder
=newStringBuilder(CHAR_COUNT);
GetWindowsDirectory(sBuilder,CHAR_COUNT);
returnsBuilder.ToString();
}


/**////<summary>
///获取系统目录
///</summary>
///<returns></returns>

publicstringGetSysDirectory()
...{
StringBuildersBuilder
=newStringBuilder(CHAR_COUNT);
GetSystemDirectory(sBuilder,CHAR_COUNT);
returnsBuilder.ToString();
}


/**////<summary>
///获取CPU信息
///</summary>
///<returns></returns>

publicCpuInfoGetCpuInfo()
...{
CpuInfocpuInfo
=newCpuInfo();
GetSystemInfo(
refcpuInfo);
returncpuInfo;
}


/**////<summary>
///获取系统内存信息
///</summary>
///<returns></returns>

publicMemoryInfoGetMemoryInfo()
...{
MemoryInfomemoryInfo
=newMemoryInfo();
GlobalMemoryStatus(
refmemoryInfo);
returnmemoryInfo;
}


/**////<summary>
///获取系统时间信息
///</summary>
///<returns></returns>

publicSystemTimeInfoGetSystemTimeInfo()
...{
SystemTimeInfosystemTimeInfo
=newSystemTimeInfo();
GetSystemTime(
refsystemTimeInfo);
returnsystemTimeInfo;
}


/**////<summary>
///获取系统名称
///</summary>
///<returns></returns>

publicstringGetOperationSystemInName()
...{
OperatingSystemos
=System.Environment.OSVersion;
stringosName="UNKNOWN";
switch(os.Platform)
...{
casePlatformID.Win32Windows:
switch(os.Version.Minor)
...{
case0:osName="Windows95";break;
case10:osName="Windows98";break;
case90:osName="WindowsME";break;
}

break;
casePlatformID.Win32NT:
switch(os.Version.Major)
...{
case3:osName="WindwsNT3.51";break;
case4:osName="WindowsNT4";break;
case5:if(os.Version.Minor==0)
...{
osName
="Windows2000";
}

elseif(os.Version.Minor==1)
...{
osName
="WindowsXP";
}

elseif(os.Version.Minor==2)
...{
osName
="WindowsServer2003";
}

break;
case6:osName="Longhorn";break;
}

break;
}

returnString.Format("{0},{1}",osName,os.Version.ToString());
}

}

以下是调用实例,为了简单,我在一个aspx页面中输出,不过这个程序可以在WinForm中调用:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Collections.Specialized;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Runtime.InteropServices;

publicpartialclassIndex:System.Web.UI.Page
...{
protectedvoidPage_Load(objectsender,EventArgse)
...{
if(!Page.IsPostBack)
...{
SystemInfosystemInfo
=newSystemInfo();
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>");
MemoryInfomemoryInfo
=systemInfo.GetMemoryInfo();
CpuInfocpuInfo
=systemInfo.GetCpuInfo();
Response.Write(
"dwActiveProcessorMask"+cpuInfo.dwActiveProcessorMask+"<br>");
Response.Write(
"dwAllocationGranularity"+cpuInfo.dwAllocationGranularity+"<br>");
Response.Write(
"CPU个数:"+cpuInfo.dwNumberOfProcessors+"<br>");
Response.Write(
"OEMID:"+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页面没有任何控件。
分享到:
评论

相关推荐

    C#获取硬盘编号、CPU编号及类型、内存大小及使用情况

    在C#编程中,获取计算机硬件的相关信息,如硬盘编号、CPU编号及类型以及内存大小和使用情况,是系统管理或软件开发中的常见需求。这些信息对于系统监控、性能优化和资源分配至关重要。以下是如何使用C#实现这些功能...

    c#获取CPU温度.pdf(系统开发)

    标题和描述中所提及的知识点主要集中在如何使用C#编程语言通过System.Management类来获取计算机硬件信息,包括CPU编号、主板编号以及硬盘编号等。这一技术对于系统开发人员来说非常实用,尤其是在需要验证硬件配置、...

    基于C#的获取本地CPU的编号(WMI应用)

    WMI不仅可以获取CPU编号,还可以获取其他硬件信息,如内存容量、硬盘信息、网络配置等。通过改变查询语句,我们可以获取更多关于系统的详细信息。例如,如果你想要获取CPU的名称和速度,可以修改查询语句为“SELECT ...

    获取CPU序列号和硬盘序列号加密生成机器码

    获取CPU序列号可以使用C#中的WMI(Windows Management Instrumentation)框架。通过查询`Win32_Processor`类,我们可以获取到CPU的相关信息,包括序列号。 2. **硬盘序列号**:硬盘也有其特有的序列号,同样用于...

    C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

    本文将详细解析如何使用C#获取包括机器名、CPU编号、硬盘编号以及网卡MAC地址等信息。 首先,我们来看获取机器名的方法。在C#中,可以通过`System.Net.Dns`类的`GetHostName`方法获取到当前计算机的主机名。这个...

    C#如何取硬件标志,取机器名,取CPU编号,第一块硬盘编号 源代码

    在C#编程中,获取计算机的硬件标志、机器名、CPU编号以及第一块硬盘编号是常见的系统信息查询任务。这些信息对于系统管理、软件激活、设备识别等方面具有重要作用。下面将详细阐述如何通过C#来获取这些信息。 1. ...

    WPF获取Windows系统内存占用和CPU占用

    在本文中,我们将深入探讨如何使用WPF(Windows Presentation Foundation)和Visifire库来实现一个功能,即实时监测并展示Windows操作系统的内存占用和CPU使用情况。Visifire是一款强大的数据可视化工具,它提供了...

    C#获取系统信息

    在C#编程中,获取系统信息是一项常见的任务,这包括但不限于内存信息、硬盘信息、网卡编号以及硬盘ID等。这些信息对于系统监控、性能分析和日志记录等场景非常有用。下面,我们将深入探讨如何使用C#来获取这些关键的...

    C#例程地址获取

    在C#中,可以使用`ManagementObjectSearcher`查询`Win32_Processor`类来获取CPU信息。 7. **Bios ID**:BIOS ID是BIOS固件的唯一标识,包含版本信息和生产日期。同样,通过WMI的`Win32_BIOS`类可以获取到这个信息。...

    asp.net 获取电脑硬件编号

    通过上述方法,我们可以在ASP.NET环境中获取到电脑的CPU序列号和硬盘编号,为我们的应用增加更多的功能和安全性。在实际项目中,可能还需要对获取的数据进行进一步处理和存储,以便后续使用。同时,为了提高代码的可...

    c#注册全过程源码

    获取CPU编号(GetCpu) CPU编号也是生成唯一注册码的一个关键因素。此方法用于获取CPU的唯一标识符。 #### 实现原理 - 同样利用`System.Management`命名空间。 - 创建一个`ManagementClass`实例,指定为"win32_...

    C#编程获取各种电脑硬件信息的方法示例

    在计算机硬件信息获取方面,C#编程提供了多种方法来获取电脑的硬件信息,如CPU编号、主板编号、硬盘编号、BIOS编号等。下面将详细介绍C#编程获取这些硬件信息的方法。 获取CPU编号 使用ManagementClass类可以获取...

    C#开发经验技巧宝典

    0721 如何获取CPU编号 446 0722 如何获取显示设备的PNPDeviceID 447 0723 如何获取声音设备的PNPDeviceID 447 0724 如何获取硬盘编号 447 0725 如何获取CPU的版本信息 448 0726 如何获取CPU的产品名称...

    C#读取计算机硬件信息

    根据给定的信息,我们可以深入探讨如何使用C#来读取计算机硬件信息,特别是关于CPU、硬盘序列号等关键数据。 ### 一、概述 在现代软件开发中,有时候需要读取计算机的硬件信息来实现某些功能,比如进行授权管理、...

    net中获取机器硬件信息

    在本文中,我们将深入探讨如何使用C#语言和.NET Framework来获取机器的硬件信息,包括机器名、CPU编号、主硬盘编号以及BIOS和MAC地址。 首先,为了获取这些信息,我们需要引入`System.Management`命名空间,该命名...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 &lt;br&gt;1.1 Visual Studio开发环境安装与配置 2 &lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2 &lt;br&gt;0002 配置合适的Visual Studio 2005...

    C#.net_经典编程例子400个

    273 实例190 获取窗口文本 273 实例191 判断文件是否正在被使用 274 实例192 在程序中调用.HLP文件 275 实例193 C#中实现文件拖放 276 实例194 文件比较 276 第7章 操作系统与Windows...

    C#程序开发范例宝典(第2版).part08

    实例253 CPU使用率 348 7.7 系统软件信息 350 实例254 获取计算机中已安装的字体 350 实例255 获取计算机的显示设备信息 351 实例256 获取系统启动后经过的时间 351 实例257 系统已经安装的打印机信息 352 ...

    C#程序开发范例宝典(第2版).part02

    实例253 CPU使用率 348 7.7 系统软件信息 350 实例254 获取计算机中已安装的字体 350 实例255 获取计算机的显示设备信息 351 实例256 获取系统启动后经过的时间 351 实例257 系统已经安装的打印机信息 352 ...

Global site tag (gtag.js) - Google Analytics