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

转载:http://www.cnblogs.com/kevinGao/archive/2011/12/09/2671025.html

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 AIP声明 
        [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      
    } 
}

  

posted @ 2014-07-13 12:50  灬后知后觉  阅读(319)  评论(0编辑  收藏  举报