C#獲取CPU占用率、內存占用、磁盤占用、進程信息


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      
    } 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM