吐血奉献: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;
}
[解决办法]
不错 ..
[解决办法]
牛
[解决办法]
mark
[解决办法]
前几天看到一个用vb.net的,终于看到c#的了。
不知道c#有没有不用api的~~~~贪心呀:)
[解决办法]
好
[解决办法]
获取系统路径.net的方法
Environment.SystemDirectory;
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
[解决办法]
mark
楼主很厚道。大家很满意,后果很严重。
系统应该将 zhoufoxcn (执子之手) 归入VIP!!
将zhoufoxcn (执子之手)的社会信用度提高9999999999%
允许zhoufoxcn (执子之手)贷款不还
授予zhoufoxcn (执子之手)国家英雄称号
奖励zhoufoxcn (执子之手)北京三居室三套(位置自选)
。。。。。。
[解决办法]
楼主多注意身体,不值得为这个吐血呀,人的生命可是只有一次。
桌面常伴,Win32API大全~~~~~ 使你不再吐血。。。
[解决办法]
我想知道VISTA以后,看M$的介绍WINFX里.
WIN32的API会逐渐消失.那么用什么编程系统基层的东西?这些C#并不擅长
用.NETFRAMWORK的类库么?WIN32 API编程还能走多远.?
[解决办法]
采用WMI技术即可,没必要直接用API.
硬盘情况查阅;Win32_DiskDrive
内存情况查阅:Win32_MemoryArray
CPU情况查阅:Win32_Processor
简单示例 -- 罗列本机CPU信息
// ProcessorInfo.cs
// Author by Yzl
using System;
using System.Management;
public class ProcessorInfo
{
public static void Main(string[] args)
{
ManagementClass processorCls = new ManagementClass( "Win32_Processor ");
// 罗列CPU处理器的信息
foreach(ManagementObject processorObj in processorCls.GetInstances())
{
Console.WriteLine( "Processor Id: "+processorObj[ "ProcessorId "]);
Console.WriteLine( "Processor Name: " + processorObj[ "Name "]);
Console.WriteLine( "Current Clock Speed: " + processorObj[ "CurrentClockSpeed "]);
}
}
}
详细请查阅:http://blog.csdn.net/yuzl32/archive/2007/03/12/1527384.aspx
[解决办法]
看了后立刻注册顶你!
[解决办法]
得到系统所有信息:
http://www.codeproject.com/cs/system/GetHardwareInformation.asp