我自己在网上找了些方法,知道怎么用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:[email protected]