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

  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/kevinGao/p/2671025.html
Copyright © 2011-2022 走看看