您的位置:首页 > 编程语言 > C#

C#获取CPU占用率、内存占用、磁盘占用、进程信息

2013-10-04 09:31 549 查看
using System;   

using System.Collections.Generic;   

using System.Diagnostics;   

using System.Threading;   

using System.IO;   

using System.Text;   

using System.Management;   

using System.Runtime.InteropServices;   

  

namespace Lemony.SystemInfo   

{   

    ///    

    /// 系统信息类 - 获取CPU、内存、磁盘、进程信息   

    ///    

    public class SystemInfo   

    {   

        private int m_ProcessorCount = 0;   //CPU个数   

        private PerformanceCounter pcCpuLoad;   //CPU计数器   

        private long m_PhysicalMemory = 0;   //物理内存   

  

        private const int GW_HWNDFIRST = 0;   

        private const int GW_HWNDNEXT = 2;   

        private const int GWL_STYLE = (-16);   

        private const int WS_VISIBLE = 268435456;   

        private const int WS_BORDER = 8388608;   

 

        #region API声明   

        [DllImport("IpHlpApi.dll")]   

        extern static public uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder);   

  

        [DllImport("User32")]   

        private extern static int GetWindow(int hWnd, int wCmd);   

           

        [DllImport("User32")]   

        private extern static int GetWindowLongA(int hWnd, int wIndx);   

  

        [DllImport("user32.dll")]   

        private static extern bool GetWindowText(int hWnd, StringBuilder title, int maxBufSize);   

  

        [DllImport("user32", CharSet = CharSet.Auto)]   

        private extern static int GetWindowTextLength(IntPtr hWnd);   

        #endregion   

 

        #region 构造函数   

        ///    

        /// 构造函数,初始化计数器等   

        ///    

        public SystemInfo()   

        {   

            //初始化CPU计数器   

            pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total");   

            pcCpuLoad.MachineName = ".";   

            pcCpuLoad.NextValue();   

  

            //CPU个数   

            m_ProcessorCount = Environment.ProcessorCount;   

  

            //获得物理内存   

            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");   

            ManagementObjectCollection moc = mc.GetInstances();   

            foreach (ManagementObject mo in moc)   

            {   

                if (mo["TotalPhysicalMemory"] != null)   

                {   

                    m_PhysicalMemory = long.Parse(mo["TotalPhysicalMemory"].ToString());   

                }   

            }               

        }    

        #endregion   

 

        #region CPU个数   

        ///    

        /// 获取CPU个数   

        ///    

        public int ProcessorCount   

        {   

            get   

            {   

                return m_ProcessorCount;   

            }   

        }   

        #endregion   

 

        #region CPU占用率   

        ///    

        /// 获取CPU占用率   

        ///    

        public float CpuLoad   

        {   

            get   

            {   

                return pcCpuLoad.NextValue();   

            }   

        }   

        #endregion   

 

        #region 可用内存   

        ///    

        /// 获取可用内存   

        ///    

        public long MemoryAvailable   

        {   

            get   

            {   

                long availablebytes = 0;   

                //ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_PerfRawData_PerfOS_Memory");   

                //foreach (ManagementObject mo in mos.Get())   

                //{   

                //    availablebytes = long.Parse(mo["Availablebytes"].ToString());   

                //}   

                ManagementClass mos = new ManagementClass("Win32_OperatingSystem");   

                foreach (ManagementObject mo in mos.GetInstances())   

                {   

                    if (mo["FreePhysicalMemory"] != null)   

                    {   

                        availablebytes = 1024 * long.Parse(mo["FreePhysicalMemory"].ToString());   

                    }   

                }   

                return availablebytes;   

            }   

        }   

        #endregion   

 

        #region 物理内存   

        ///    

        /// 获取物理内存   

        ///    

        public long PhysicalMemory   

        {   

            get   

            {   

                return m_PhysicalMemory;   

            }   

        }   

        #endregion   

 

        #region 获得分区信息   

        ///    

        /// 获取分区信息   

        ///    

        public List GetLogicalDrives()   

        {   

            List drives = new List();   

            ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk");   

            ManagementObjectCollection disks = diskClass.GetInstances();   

            foreach (ManagementObject disk in disks)   

            {   

                // DriveType.Fixed 为固定磁盘(硬盘)   

                if (int.Parse(disk["DriveType"].ToString()) == (int)DriveType.Fixed)   

                {   

                    drives.Add(new DiskInfo(disk["Name"].ToString(), long.Parse(disk["Size"].ToString()), long.Parse(disk["FreeSpace"].ToString())));   

                }   

            }   

            return drives;   

        }   

        ///    

        /// 获取特定分区信息   

        ///    

        /// 盘符   

        public List GetLogicalDrives(char DriverID)   

        {   

            List drives = new List();   

            WqlObjectQuery wmiquery = new WqlObjectQuery("SELECT * FROM Win32_LogicalDisk WHERE DeviceID = ’" + DriverID + ":’");   

            ManagementObjectSearcher wmifind = new ManagementObjectSearcher(wmiquery);   

            foreach (ManagementObject disk in wmifind.Get())   

            {   

                if (int.Parse(disk["DriveType"].ToString()) == (int)DriveType.Fixed)   

                {   

                    drives.Add(new DiskInfo(disk["Name"].ToString(), long.Parse(disk["Size"].ToString()), long.Parse(disk["FreeSpace"].ToString())));   

                }   

            }   

            return drives;   

        }   

        #endregion   

 

        #region 获得进程列表   

        ///    

        /// 获得进程列表   

        ///    

        public List GetProcessInfo()   

        {   

            List pInfo = new List();   

            Process[] processes = Process.GetProcesses();   

            foreach (Process instance in processes)   

            {   

                try   

                {   

                    pInfo.Add(new ProcessInfo(instance.Id,   

                        instance.ProcessName,   

                        instance.TotalProcessorTime.TotalMilliseconds,   

                        instance.WorkingSet64,   

                        instance.MainModule.FileName));   

                }   

                catch { }   

            }   

            return pInfo;   

        }   

        ///    

        /// 获得特定进程信息   

        ///    

        /// 进程名称   

        public List GetProcessInfo(string ProcessName)   

        {   

            List pInfo = new List();   

            Process[] processes = Process.GetProcessesByName(ProcessName);   

            foreach (Process instance in processes)   

            {   

                try   

                {   

                    pInfo.Add(new ProcessInfo(instance.Id,   

                        instance.ProcessName,   

                        instance.TotalProcessorTime.TotalMilliseconds,   

                        instance.WorkingSet64,   

                        instance.MainModule.FileName));   

                }   

                catch { }   

            }   

            return pInfo;   

        }   

        #endregion   

 

        #region 结束指定进程   

        ///    

        /// 结束指定进程   

        ///    

        /// 进程的 Process ID   

        public static void EndProcess(int pid)   

        {   

            try   

            {   

                Process process = Process.GetProcessById(pid);   

                process.Kill();   

            }   

            catch { }   

        }   

        #endregion   

       

 

        #region 查找所有应用程序标题   

        ///    

        /// 查找所有应用程序标题   

        ///    

        /// 应用程序标题范型   

        public static List FindAllApps(int Handle)   

        {   

            List Apps = new List();   

  

            int hwCurr;   

            hwCurr = GetWindow(Handle, GW_HWNDFIRST);   

  

            while (hwCurr > 0)   

            {   

                int IsTask = (WS_VISIBLE | WS_BORDER);   

                int lngStyle = GetWindowLongA(hwCurr, GWL_STYLE);   

                bool TaskWindow = ((lngStyle & IsTask) == IsTask);   

                if (TaskWindow)   

                {   

                    int length = GetWindowTextLength(new IntPtr(hwCurr));   

                    StringBuilder sb = new StringBuilder(2 * length + 1);   

                    GetWindowText(hwCurr, sb, sb.Capacity);   

                    string strTitle = sb.ToString();   

                    if (!string.IsNullOrEmpty(strTitle))   

                    {   

                        Apps.Add(strTitle);   

                    }   

                }   

                hwCurr = GetWindow(hwCurr, GW_HWNDNEXT);   

            }   

  

            return Apps;   

        }   

        #endregion        

    }   

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: