用哪些api的什么方法去获取系统信息

happyxiaowuge 2011-01-21 11:35:47
我自己在网上找了些方法,知道怎么用api函数去获取信息,但前提是知道调用哪个dll以及调用他的哪个方法。贴点自己的代码再写问题。

class getConditionByApi
{

[DllImport("kernel32 ")]
public static extern void GetWindowsDirectory(StringBuilder WinDir, int count);
[DllImport("kernel32 ")]
public static extern void GetSystemDirectory(StringBuilder SysDir, int count);
[DllImport("kernel32 ")]
public static extern void GetSystemInfo(ref CPU_INFO cpuinfo);
[DllImport("kernel32 ")]
public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo);
[DllImport("kernel32 ")]
public static extern void GetSystemTime(ref SYSTEMTIME_INFO stinfo);


//定义CPU的信息结构
[StructLayout(LayoutKind.Sequential)]
public struct CPU_INFO
{
public uint dwOemId;
public uint dwPageSize;
public uint lpMinimumApplicationAddress;
public uint lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public uint dwProcessorLevel;
public uint dwProcessorRevision;
}


//定义内存的信息结构
[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_INFO
{
public uint dwLength;
public uint dwMemoryLoad;
public uint dwTotalPhys;
public uint dwAvailPhys;
public uint dwTotalPageFile;
public uint dwAvailPageFile;
public uint dwTotalVirtual;
public uint dwAvailVirtual;
}
/// <summary>
/// 获取CPU信息
/// </summary>
/// <returns></returns>
public static string getCpuInfo()
{
string cupInfo = "";
CPU_INFO CpuInfo;
CpuInfo = new CPU_INFO();
GetSystemInfo(ref CpuInfo);
cupInfo =cupInfo+ "本计算机中有 " + CpuInfo.dwNumberOfProcessors.ToString() + "个CPU \n";
cupInfo = cupInfo + "CPU的类型为 " + CpuInfo.dwProcessorType.ToString()+"\n";
cupInfo = cupInfo + "CPU等级为 " + CpuInfo.dwProcessorLevel.ToString()+"\n";
cupInfo = cupInfo + "CPU的OEM ID为 " + CpuInfo.dwOemId.ToString() + "\n";
cupInfo = cupInfo + "CPU中的页面大小为 " + CpuInfo.dwPageSize.ToString() + "\n";
return cupInfo;
}


/// <summary>
/// 获取内存信息
/// </summary>
/// <returns></returns>
public static string getMemoryInfomation()
{
string memoryInfo = "";
MEMORY_INFO MemInfo;
MemInfo = new MEMORY_INFO();
GlobalMemoryStatus(ref MemInfo);
memoryInfo =memoryInfo+ "内存使用率 "+MemInfo.dwMemoryLoad.ToString()+"% \n" ;
memoryInfo = memoryInfo + "物理内存共有 " + ((double.Parse(MemInfo.dwTotalPhys.ToString()))/1024/1024/1024).ToString("0.00") + "G \n";
memoryInfo = memoryInfo + "可使用的物理内存有 " + ((double.Parse(MemInfo.dwAvailPhys.ToString()))/1024/1024/1024).ToString("0.00") + "G \n";
memoryInfo = memoryInfo + "交换文件总大小为 " + ((double.Parse(MemInfo.dwTotalPageFile.ToString())) / 1024 / 1024 / 1024).ToString("0.00") + "G \n";
memoryInfo = memoryInfo + "尚可交换文件大小为 " + ((double.Parse(MemInfo.dwAvailPageFile.ToString())) / 1024 / 1024 / 1024).ToString("0.00") + "G \n";
memoryInfo = memoryInfo + "总虚拟内存有 " + ((double.Parse(MemInfo.dwTotalVirtual.ToString())) / 1024 / 1024 / 1024).ToString("0.00") + "G \n";
memoryInfo = memoryInfo + "未用虚拟内存有 " + ((double.Parse(MemInfo.dwAvailVirtual.ToString())) / 1024 / 1024 / 1024).ToString("0.00") + "G \n";
return memoryInfo;
}
}

现在的问题是如果我要知道CPU使用率,或者其他信息如硬盘空间,显卡信息,网卡信息等,就是不知道要DllImport哪个东西,调用哪个方法,并且有些需要结构体参数的方法,也不知道结构体要怎么去定义,需要哪些属性,就像我的代码里的CPU_INFO那个结构体一样,我在里面找不到使用率的属性,这些东西我要怎样才能去知道呢?

之前用wmi去获取电脑的硬件信息,对于每个类都得去MSDN上查看类库信息,但是也有些东西获取不到,比如计算机的品牌,处理器的牌子,在MSDN上的类库里都找不到对应的属性,而且有些属性找到了利用CpuInfo =CpuInfo+"Cpu序列号:" +mo.Properties["ProcessorId"].Value.ToString()这样的语句去获取,却提示“未将对象的引用添加到对象的实例”,调试了看看原来是空的,不是自己不去想办法,是实在木有办法了,在网上找了很多资料都没有找到相关的信息,恳求高手帮忙,给资料,给提示,给方法都行,email:281517986@qq.com
...全文
206 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyxiaowuge 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 flyerwing 的回复:]
WMI里好象也可以获取部分吧.
[/Quote]

是啊 可是我要的还有不可以获取的那些部分
happyxiaowuge 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wy811007 的回复:]
话说c# 里有自带的获得系统信息的方法和属性..
[/Quote]

话说在哪?
wy811007 2011-01-21
  • 打赏
  • 举报
回复
话说c# 里有自带的获得系统信息的方法和属性..
flyerwing 2011-01-21
  • 打赏
  • 举报
回复
WMI里好象也可以获取部分吧.

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧