• 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      
        } 
    }
  • 相关阅读:
    7-11
    7-9
    7-8
    7-7
    7-6
    7-5
    7-4
    7-3
    第08次:升级《陋习手记》完善主从UI
    第07次:升级《陋习手记》显示多条数据
  • 原文地址:https://www.cnblogs.com/zery/p/6256850.html
Copyright © 2020-2023  润新知