zoukankan
html css js c++ java
C#获取CPU编号、硬盘编号等系统有关环境、属性
如果利用C#获取系统有关环境和属性,这个也是在网上问得比较多的问题,不过大部分只有提问没有回答,最近正好想做有关方面的东西,整理了一下,提供给大家,希望能给大家提供参考意见:
首先需要定义几个结构(struct) ,便于DllImport作为返回参数调用。以下是代码:
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.cs
using
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.cs
using
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>
"
);
}
}
}
查看全文
相关阅读:
shell脚本通过ping命令来获取平均延时
源码大招:不服来战!撸这些完整项目,你不牛逼都难!
最新最全的 Android 开源项目合集
3.环境搭建-Hadoop(CDH)集群搭建
mycat安装和测试
LVS+keepalived
Linux上利用NFS实现远程挂载
CentOS下MySQL主从同步配置
Nginx配置文件(nginx.conf)配置详解
Storm集群搭建
原文地址:https://www.cnblogs.com/tonybinlj/p/1328820.html
最新文章
静态代码块和非静态代码块的比较
数据排序
您也使用托管C++吗? 【转】
托管和非托管转换新方法:Marshaling Library(zz) 【转】
BumpMapping [转]
开始我的GL离屏渲染绑定[转]
倾斜摄影自动化建模成果的数据组织和单体化【转】
OpenGL超级宝典笔记——遮挡查询 [转]
几种支持动作模型格式的比较(MD2,MD5,sea3d) 【转】
投影纹理映射(Projective Texture Mapping) 【转】
热门文章
Projective Texture的原理与实现 【转】
常用颜色对照表 [转]
公网通过代理访问阿里云vpc redis
Redis 数据恢复方法,redis-port 工具将自建 redis 的 rdb文件同步到云数据库
docker 报错:x509: certificate has expired or is not yet valid
centos7 安装docker后启动报错
linux在shell中获取时间 date巧用
zabbix监控客户端本地网络的延时状态
解决zabbix“ZBX_NOTSUPPORTED: Timeout while executing a shell script”报错
Linux Shell 算术运算
Copyright © 2011-2022 走看看