zoukankan      html  css  js  c++  java
  • 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      
        } 
    }

  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/kevinGao/p/2671025.html
Copyright © 2011-2022 走看看