github地址:https://github.com/charygao/SmsComputerMonitor

软件用于实时监控当前系统资源等情况,并调用接口,当资源被超额占用时,发送警报到个人手机;界面模拟Console的显示方式,信息缓冲大小由配置决定;可以定制监控的资源,包括:

  • cpu使用率;
  • 内存使用率;
  • 磁盘使用率;
  • 网络使用率;
  • 进程线程数;

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Management;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading; namespace SmsComputerMonitor
{
public class ComputerInfo
{
#region Fields and Properties private readonly ManagementScope _LocalManagementScope; private readonly PerformanceCounter _pcCpuLoad; //CPU计数器,全局
private const int GwHwndfirst = ;
private const int GwHwndnext = ;
private const int GwlStyle = -;
private const int WsBorder = ;
private const int WsVisible = ; #region CPU占用率 /// <summary>
/// 获取CPU占用率(系统CPU使用率)
/// </summary>
public float CpuLoad => _pcCpuLoad.NextValue(); #endregion #region 本地主机名 public string HostName => Dns.GetHostName(); #endregion #region 本地IPV4列表 public List<IPAddress> IpAddressV4S
{
get
{
var ipV4S = new List<IPAddress>();
foreach (var address in Dns.GetHostAddresses(Dns.GetHostName()))
if (address.AddressFamily == AddressFamily.InterNetwork)
ipV4S.Add(address);
return ipV4S;
}
} #endregion #region 本地IPV6列表 public List<IPAddress> IpAddressV6S
{
get
{
var ipV6S = new List<IPAddress>();
foreach (var address in Dns.GetHostAddresses(Dns.GetHostName()))
if (address.AddressFamily == AddressFamily.InterNetworkV6)
ipV6S.Add(address);
return ipV6S;
}
} #endregion #region 可用内存 /// <summary>
/// 获取可用内存
/// </summary>
public long MemoryAvailable
{
get
{
long availablebytes = ;
var managementClassOs = new ManagementClass("Win32_OperatingSystem");
foreach (var managementBaseObject in managementClassOs.GetInstances())
if (managementBaseObject["FreePhysicalMemory"] != null)
availablebytes = * long.Parse(managementBaseObject["FreePhysicalMemory"].ToString());
return availablebytes;
}
} #endregion #region 物理内存 /// <summary>
/// 获取物理内存
/// </summary>
public long PhysicalMemory { get; } #endregion #region CPU个数 /// <summary>
/// 获取CPU个数
/// </summary>
// ReSharper disable once UnusedAutoPropertyAccessor.Global
public int ProcessorCount { get; } #endregion #region 已用内存大小 public long SystemMemoryUsed => PhysicalMemory - MemoryAvailable; #endregion #endregion #region Constructors /// <summary>
/// 构造函数,初始化计数器等
/// </summary>
public ComputerInfo()
{
_LocalManagementScope = new ManagementScope($"\\\\{HostName}\\root\\cimv2");
//初始化CPU计数器
_pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total") {MachineName = "."};
_pcCpuLoad.NextValue(); //CPU个数
ProcessorCount = Environment.ProcessorCount; //获得物理内存
var managementClass = new ManagementClass("Win32_ComputerSystem");
var managementObjectCollection = managementClass.GetInstances();
foreach (var managementBaseObject in managementObjectCollection)
if (managementBaseObject["TotalPhysicalMemory"] != null)
PhysicalMemory = long.Parse(managementBaseObject["TotalPhysicalMemory"].ToString());
} #endregion #region Methods #region 结束指定进程 /// <summary>
/// 结束指定进程
/// </summary>
/// <param name="pid">进程的 Process ID</param>
public static void EndProcess(int pid)
{
try
{
var process = Process.GetProcessById(pid);
process.Kill();
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
} #endregion #region 查找所有应用程序标题 /// <summary>
/// 查找所有应用程序标题
/// </summary>
/// <returns>应用程序标题范型</returns>
public static List<string> FindAllApps(int handle)
{
var apps = new List<string>(); var hwCurr = GetWindow(handle, GwHwndfirst); while (hwCurr > )
{
var IsTask = WsVisible | WsBorder;
var lngStyle = GetWindowLongA(hwCurr, GwlStyle);
var taskWindow = (lngStyle & IsTask) == IsTask;
if (taskWindow)
{
var length = GetWindowTextLength(new IntPtr(hwCurr));
var sb = new StringBuilder( * length + );
GetWindowText(hwCurr, sb, sb.Capacity);
var strTitle = sb.ToString();
if (!string.IsNullOrEmpty(strTitle))
apps.Add(strTitle);
}
hwCurr = GetWindow(hwCurr, GwHwndnext);
} return apps;
} #endregion public static List<PerformanceCounterCategory> GetAllCategories(bool isPrintRoot = true,
bool isPrintTree = true)
{
var result = new List<PerformanceCounterCategory>();
foreach (var category in PerformanceCounterCategory.GetCategories())
{
result.Add(category);
if (isPrintRoot)
{
PerformanceCounter[] categoryCounters;
switch (category.CategoryType)
{
case PerformanceCounterCategoryType.SingleInstance:
categoryCounters = category.GetCounters();
PrintCategoryAndCounters(category, categoryCounters, isPrintTree);
break;
case PerformanceCounterCategoryType.MultiInstance:
var categoryCounterInstanceNames = category.GetInstanceNames();
if (categoryCounterInstanceNames.Length > )
{
categoryCounters = category.GetCounters(categoryCounterInstanceNames[]);
PrintCategoryAndCounters(category, categoryCounters, isPrintTree);
} break;
case PerformanceCounterCategoryType.Unknown:
categoryCounters = category.GetCounters();
PrintCategoryAndCounters(category, categoryCounters, isPrintTree);
break;
//default: break;
}
}
}
return result;
} /// <summary>
/// 获取本地所有磁盘
/// </summary>
/// <returns></returns>
public static DriveInfo[] GetAllLocalDriveInfo()
{
return DriveInfo.GetDrives();
} /// <summary>
/// 获取本机所有进程
/// </summary>
/// <returns></returns>
public static Process[] GetAllProcesses()
{
return Process.GetProcesses();
} public static List<PerformanceCounter> GetAppointedCategorieCounters(
PerformanceCategoryEnums.PerformanceCategoryEnum categorieEnum, bool isPrintRoot = true,
bool isPrintTree = true)
{
var result = new List<PerformanceCounter>();
var categorieName = PerformanceCategoryEnums.GetCategoryNameString(categorieEnum);
if (PerformanceCounterCategory.Exists(categorieName))
{
var category = new PerformanceCounterCategory(categorieName);
PerformanceCounter[] categoryCounters;
switch (category.CategoryType)
{
case PerformanceCounterCategoryType.Unknown:
categoryCounters = category.GetCounters();
result = categoryCounters.ToList();
if (isPrintRoot)
PrintCategoryAndCounters(category, categoryCounters, isPrintTree);
break;
case PerformanceCounterCategoryType.SingleInstance:
categoryCounters = category.GetCounters();
result = categoryCounters.ToList();
if (isPrintRoot)
PrintCategoryAndCounters(category, categoryCounters, isPrintTree);
break;
case PerformanceCounterCategoryType.MultiInstance:
var categoryCounterInstanceNames = category.GetInstanceNames();
if (categoryCounterInstanceNames.Length > )
{
categoryCounters = category.GetCounters(categoryCounterInstanceNames[]);
result = categoryCounters.ToList();
if (isPrintRoot)
PrintCategoryAndCounters(category, categoryCounters, isPrintTree);
}
break;
//default: break;
}
}
return result;
} /// <summary>
/// 获取指定磁盘可用大小
/// </summary>
/// <param name="drive"></param>
/// <returns></returns>
public static long GetDriveAvailableFreeSpace(DriveInfo drive)
{
return drive.AvailableFreeSpace;
} /// <summary>
/// 获取指定磁盘总空白大小
/// </summary>
/// <param name="drive"></param>
/// <returns></returns>
public static long GetDriveTotalFreeSpace(DriveInfo drive)
{
return drive.TotalFreeSpace;
} /// <summary>
/// 获取指定磁盘总大小
/// </summary>
/// <param name="drive"></param>
/// <returns></returns>
public static long GetDriveTotalSize(DriveInfo drive)
{
return drive.TotalSize;
} #region 获取当前使用的IP,超时时间至少1s /// <summary>
/// 获取当前使用的IP,超时时间至少1s
/// </summary>
/// <returns></returns>
public static string GetLocalIP(TimeSpan timeOut, bool isBelieveTimeOutValue = false, bool recordLog = true)
{
if (timeOut < new TimeSpan(, , ))
timeOut = new TimeSpan(, , );
var isTimeOut = RunApp("route", "print", timeOut, out var result, recordLog);
if (isTimeOut && !isBelieveTimeOutValue)
try
{
var tcpClient = new TcpClient();
tcpClient.Connect("www.baidu.com", );
var ip = ((IPEndPoint) tcpClient.Client.LocalEndPoint).Address.ToString();
tcpClient.Close();
return ip;
}
catch (Exception exception)
{
Console.WriteLine(exception);
return null;
}
var getMatchedGroup = Regex.Match(result, @"0.0.0.0\s+0.0.0.0\s+(\d+.\d+.\d+.\d+)\s+(\d+.\d+.\d+.\d+)");
if (getMatchedGroup.Success)
return getMatchedGroup.Groups[].Value;
return null;
} #endregion #region 获取本机主DNS /// <summary>
/// 获取本机主DNS
/// </summary>
/// <returns></returns>
public static string GetPrimaryDNS(bool recordLog = true)
{
RunApp("nslookup", "", new TimeSpan(, , ), out var result, recordLog, true); //nslookup会超时
var getMatchedGroup = Regex.Match(result, @"\d+\.\d+\.\d+\.\d+");
if (getMatchedGroup.Success)
return getMatchedGroup.Value;
return null;
} #endregion /// <summary>
/// 获取指定进程最大线程数
/// </summary>
/// <returns></returns>
public static int GetProcessMaxThreadCount(Process process)
{
return process.Threads.Count;
} /// <summary>
/// 获取指定进程最大线程数
/// </summary>
/// <returns></returns>
public static int GetProcessMaxThreadCount(string processName)
{
var maxThreadCount = -;
foreach (var process in Process.GetProcessesByName(processName))
if (maxThreadCount < process.Threads.Count)
maxThreadCount = process.Threads.Count;
return maxThreadCount;
} private static void PrintCategoryAndCounters(PerformanceCounterCategory category,
PerformanceCounter[] categoryCounters, bool isPrintTree)
{
Console.WriteLine($@"===============>{category.CategoryName}:[{categoryCounters.Length}]");
if (isPrintTree)
foreach (var counter in categoryCounters)
Console.WriteLine($@" ""{category.CategoryName}"", ""{counter.CounterName}""");
} /// <summary>
/// 运行一个控制台程序并返回其输出参数。耗时至少1s
/// </summary>
/// <param name="filename">程序名</param>
/// <param name="arguments">输入参数</param>
/// <param name="result"></param>
/// <param name="recordLog"></param>
/// <param name="timeOutTimeSpan"></param>
/// <param name="needKill"></param>
/// <returns></returns>
private static bool RunApp(string filename, string arguments, TimeSpan timeOutTimeSpan, out string result,
bool recordLog = true, bool needKill = false)
{
try
{
var stopwatch = Stopwatch.StartNew();
if (recordLog)
Console.WriteLine($@"{filename} {arguments}");
if (timeOutTimeSpan < new TimeSpan(, , ))
timeOutTimeSpan = new TimeSpan(, , );
var isTimeOut = false;
var process = new Process
{
StartInfo =
{
FileName = filename,
CreateNoWindow = true,
Arguments = arguments,
RedirectStandardOutput = true,
RedirectStandardInput = true,
UseShellExecute = false
}
};
process.Start();
using (var streamReader = new StreamReader(process.StandardOutput.BaseStream, Encoding.Default))
{
if (needKill)
{
Thread.Sleep();
process.Kill();
}
while (!process.HasExited)
if (stopwatch.Elapsed > timeOutTimeSpan)
{
process.Kill();
stopwatch.Stop();
isTimeOut = true;
break;
}
result = streamReader.ReadToEnd();
streamReader.Close();
if (recordLog)
Console.WriteLine($@"返回[{result}]耗时:[{stopwatch.Elapsed}]是否超时:{isTimeOut}");
return isTimeOut;
}
}
catch (Exception exception)
{
result = exception.ToString();
Console.WriteLine($@"出错[{result}]");
return true;
}
} #endregion #region 获取本地/远程所有内存信息 /// <summary>
/// 需要启动RPC服务,获取本地内存信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32PhysicalMemoryInfos(
PhysicalMemoryInfoEnums.PhysicalMemoryInfoEnum eEnum = PhysicalMemoryInfoEnums.PhysicalMemoryInfoEnum.All,
bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
_LocalManagementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(_LocalManagementScope,
new SelectQuery(
$"SELECT {PhysicalMemoryInfoEnums.GetQueryString(eEnum)} FROM Win32_PhysicalMemory"))
.Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
PhysicalMemoryInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程内存信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32PhysicalMemoryInfos(
string remoteHostName,
PhysicalMemoryInfoEnums.PhysicalMemoryInfoEnum eEnum = PhysicalMemoryInfoEnums.PhysicalMemoryInfoEnum.All,
bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostName}\\root\\cimv2");
managementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
new SelectQuery(
$"SELECT {PhysicalMemoryInfoEnums.GetQueryString(eEnum)} FROM Win32_PhysicalMemory"))
.Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
PhysicalMemoryInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程内存信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32PhysicalMemoryInfos(
IPAddress remoteHostIp,
PhysicalMemoryInfoEnums.PhysicalMemoryInfoEnum eEnum = PhysicalMemoryInfoEnums.PhysicalMemoryInfoEnum.All,
bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostIp}\\root\\cimv2");
managementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
new SelectQuery(
$"SELECT {PhysicalMemoryInfoEnums.GetQueryString(eEnum)} FROM Win32_PhysicalMemory"))
.Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
PhysicalMemoryInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} #endregion #region 获取本地/远程所有原始性能计数器类别信息 /// <summary>
/// 需要启动RPC服务,获取本地所有原始性能计数器类别信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>>
GetWin32PerfRawDataPerfOsMemoryInfos(
PerfRawDataPerfOsMemoryInfoEnums.PerfRawDataPerfOsMemoryInfoEnum eEnum =
PerfRawDataPerfOsMemoryInfoEnums.PerfRawDataPerfOsMemoryInfoEnum.All,
bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
_LocalManagementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(_LocalManagementScope,
new SelectQuery(
$"SELECT {PerfRawDataPerfOsMemoryInfoEnums.GetQueryString(eEnum)} FROM Win32_PerfRawData_PerfOS_Memory"))
.Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
PerfRawDataPerfOsMemoryInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程所有原始性能计数器类别信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>>
GetWin32PerfRawDataPerfOsMemoryInfos(
string remoteHostName,
PerfRawDataPerfOsMemoryInfoEnums.PerfRawDataPerfOsMemoryInfoEnum eEnum =
PerfRawDataPerfOsMemoryInfoEnums.PerfRawDataPerfOsMemoryInfoEnum.All, bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostName}\\root\\cimv2");
managementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
new SelectQuery(
$"SELECT {PerfRawDataPerfOsMemoryInfoEnums.GetQueryString(eEnum)} FROM Win32_PerfRawData_PerfOS_Memory"))
.Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
PerfRawDataPerfOsMemoryInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程所有原始性能计数器类别信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>>
GetWin32PerfRawDataPerfOsMemoryInfos(
IPAddress remoteHostIp,
PerfRawDataPerfOsMemoryInfoEnums.PerfRawDataPerfOsMemoryInfoEnum eEnum =
PerfRawDataPerfOsMemoryInfoEnums.PerfRawDataPerfOsMemoryInfoEnum.All, bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostIp}\\root\\cimv2");
managementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
new SelectQuery(
$"SELECT {PerfRawDataPerfOsMemoryInfoEnums.GetQueryString(eEnum)} FROM Win32_PerfRawData_PerfOS_Memory"))
.Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
PerfRawDataPerfOsMemoryInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} #endregion #region 获取本地/远程所有CPU信息 /// <summary>
/// 需要启动RPC服务,获取本地所有 CPU 信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32ProcessorInfos(
ProcessorInfoEnums.ProcessorInfoEnum eEnum = ProcessorInfoEnums.ProcessorInfoEnum.All,
bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
_LocalManagementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(_LocalManagementScope,
new SelectQuery($"SELECT {ProcessorInfoEnums.GetQueryString(eEnum)} FROM Win32_Processor")).Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
ProcessorInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程所有 CPU 信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32ProcessorInfos(
string remoteHostName,
ProcessorInfoEnums.ProcessorInfoEnum eEnum = ProcessorInfoEnums.ProcessorInfoEnum.All, bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostName}\\root\\cimv2");
managementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
new SelectQuery($"SELECT {ProcessorInfoEnums.GetQueryString(eEnum)} FROM Win32_Processor")).Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
ProcessorInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程所有 CPU 信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32ProcessorInfos(
IPAddress remoteHostIp,
ProcessorInfoEnums.ProcessorInfoEnum eEnum = ProcessorInfoEnums.ProcessorInfoEnum.All, bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostIp}\\root\\cimv2");
managementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
new SelectQuery($"SELECT {ProcessorInfoEnums.GetQueryString(eEnum)} FROM Win32_Processor")).Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
ProcessorInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} #endregion #region 获取本地/远程所有进程信息 /// <summary>
/// 需要启动RPC服务,获取本地所有 进程 信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32ProcessInfos(
string processName = null, ProcessInfoEnums.ProcessInfoEnum eEnum = ProcessInfoEnums.ProcessInfoEnum.All,
bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
_LocalManagementScope.Connect();
var selectQueryString = new SelectQuery(
$"SELECT {ProcessInfoEnums.GetQueryString(eEnum)} FROM Win32_Process");
if (processName != null)
selectQueryString = new SelectQuery(
$"SELECT {ProcessInfoEnums.GetQueryString(eEnum)} FROM Win32_Process Where Name = '{processName}'");
foreach (var managementBaseObject in new ManagementObjectSearcher(_LocalManagementScope,
selectQueryString).Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
ProcessInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程所有 进程 信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetRemoteWin32ProcessInfos(
string remoteHostName, string processName = null,
ProcessInfoEnums.ProcessInfoEnum eEnum = ProcessInfoEnums.ProcessInfoEnum.All,
bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostName}\\root\\cimv2");
managementScope.Connect();
var selectQueryString = new SelectQuery(
$"SELECT {ProcessInfoEnums.GetQueryString(eEnum)} FROM Win32_Process");
if (processName != null)
selectQueryString = new SelectQuery(
$"SELECT {ProcessInfoEnums.GetQueryString(eEnum)} FROM Win32_Process Where Name = '{processName}'");
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
selectQueryString).Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
ProcessInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程所有 进程 信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetRemoteWin32ProcessInfos(
IPAddress remoteHostIp, string processName = null,
ProcessInfoEnums.ProcessInfoEnum eEnum = ProcessInfoEnums.ProcessInfoEnum.All,
bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostIp}\\root\\cimv2");
managementScope.Connect();
var selectQueryString = new SelectQuery(
$"SELECT {ProcessInfoEnums.GetQueryString(eEnum)} FROM Win32_Process");
if (processName != null)
selectQueryString = new SelectQuery(
$"SELECT {ProcessInfoEnums.GetQueryString(eEnum)} FROM Win32_Process Where Name = '{processName}'");
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
selectQueryString).Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
ProcessInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} #endregion #region 获取本地/远程所有系统信息 /// <summary>
/// 需要启动RPC服务,获取本地所有 系统 信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32OperatingSystemInfos(
OperatingSystemInfoEnums.OperatingSystemInfoEnum eEnum =
OperatingSystemInfoEnums.OperatingSystemInfoEnum.All,
bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
_LocalManagementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(_LocalManagementScope,
new SelectQuery(
$"SELECT {OperatingSystemInfoEnums.GetQueryString(eEnum)} FROM Win32_OperatingSystem")).Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
OperatingSystemInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程所有 系统 信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32OperatingSystemInfos(
string remoteHostName,
OperatingSystemInfoEnums.OperatingSystemInfoEnum eEnum =
OperatingSystemInfoEnums.OperatingSystemInfoEnum.All, bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostName}\\root\\cimv2");
managementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
new SelectQuery(
$"SELECT {OperatingSystemInfoEnums.GetQueryString(eEnum)} FROM Win32_OperatingSystem")).Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
OperatingSystemInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} /// <summary>
/// 需要启动RPC服务,获取远程所有 系统 信息:
/// </summary>
/// <returns></returns>
public List<Dictionary<string, string>> GetWin32OperatingSystemInfos(
IPAddress remoteHostIp,
OperatingSystemInfoEnums.OperatingSystemInfoEnum eEnum =
OperatingSystemInfoEnums.OperatingSystemInfoEnum.All, bool isPrint = true)
{
var result = new List<Dictionary<string, string>>();
try
{
var managementScope = new ManagementScope($"\\\\{remoteHostIp}\\root\\cimv2");
managementScope.Connect();
foreach (var managementBaseObject in new ManagementObjectSearcher(managementScope,
new SelectQuery(
$"SELECT {OperatingSystemInfoEnums.GetQueryString(eEnum)} FROM Win32_OperatingSystem")).Get())
{
if (isPrint)
Console.WriteLine($@"<=========={managementBaseObject}===========>");
var thisObjectsDictionary = new Dictionary<string, string>();
foreach (var property in managementBaseObject.Properties)
{
if (isPrint)
Console.WriteLine(
$@"[{property.Name,40}] -> [{property.Value,-40}]//{
OperatingSystemInfoEnums.GetDescriptionString(property.Name)
}.");
thisObjectsDictionary.Add(property.Name, property.Value.ToString());
}
result.Add(thisObjectsDictionary);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
return result;
} #endregion #region 单位转换进制 private const int KbDiv = ;
private const int MbDiv = * ;
private const int GbDiv = * * ; #endregion #region 单个程序Cpu使用大小 /// <summary>
/// 获取进程一段时间内cpu平均使用率(有误差),最低500ms 内的平均值
/// </summary>
/// <returns></returns>
public double GetProcessCpuProcessorRatio(Process process, TimeSpan interVal)
{
if (!process.HasExited)
{
var processorTime = new PerformanceCounter("Process", "% Processor Time", process.ProcessName);
processorTime.NextValue();
if (interVal.TotalMilliseconds < )
interVal = new TimeSpan(, , , , );
Thread.Sleep(interVal);
return processorTime.NextValue() / Environment.ProcessorCount;
}
return ;
} /// <summary>
/// 获取进程一段时间内的平均cpu使用率(有误差),最低500ms 内的平均值
/// </summary>
/// <returns></returns>
public double GetProcessCpuProcessorTime(Process process, TimeSpan interVal)
{
if (!process.HasExited)
{
var prevCpuTime = process.TotalProcessorTime;
if (interVal.TotalMilliseconds < )
interVal = new TimeSpan(, , , , );
Thread.Sleep(interVal);
var curCpuTime = process.TotalProcessorTime;
var value = (curCpuTime - prevCpuTime).TotalMilliseconds / (interVal.TotalMilliseconds - ) /
Environment.ProcessorCount * ;
return value;
}
return ;
} #endregion #region 单个程序内存使用大小 /// <summary>
/// 获取关联进程分配的物理内存量,工作集(进程类)
/// </summary>
/// <returns></returns>
public long GetProcessWorkingSet64Kb(Process process)
{
if (!process.HasExited)
return process.WorkingSet64 / KbDiv;
return ;
} /// <summary>
/// 获取进程分配的物理内存量,公有工作集
/// </summary>
/// <returns></returns>
public float GetProcessWorkingSetKb(Process process)
{
if (!process.HasExited)
{
var processWorkingSet = new PerformanceCounter("Process", "Working Set", process.ProcessName);
return processWorkingSet.NextValue() / KbDiv;
}
return ;
} /// <summary>
/// 获取进程分配的物理内存量,私有工作集
/// </summary>
/// <returns></returns>
public float GetProcessWorkingSetPrivateKb(Process process)
{
if (!process.HasExited)
{
var processWorkingSetPrivate =
new PerformanceCounter("Process", "Working Set - Private", process.ProcessName);
return processWorkingSetPrivate.NextValue() / KbDiv;
}
return ;
} #endregion #region 系统内存使用大小 /// <summary>
/// 系统内存使用大小Mb
/// </summary>
/// <returns></returns>
public long GetSystemMemoryDosageMb()
{
return SystemMemoryUsed / MbDiv;
} /// <summary>
/// 系统内存使用大小Gb
/// </summary>
/// <returns></returns>
public long GetSystemMemoryDosageGb()
{
return SystemMemoryUsed / GbDiv;
} #endregion #region AIP声明 [DllImport("IpHlpApi.dll")]
public static extern uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder); [DllImport("User32")]
private static extern int GetWindow(int hWnd, int wCmd); [DllImport("User32")]
private static extern 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 static extern int GetWindowTextLength(IntPtr hWnd); #endregion
}
}

最新文章

  1. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用
  2. 8.2 使用Fluent API进行实体映射【Code-First系列】
  3. JUnit4参数的使用
  4. Andriod中绘(画)图----Canvas的使用详解
  5. 解锁Scott过程中出现的问题及解决办法
  6. Entropy (huffman) 优先队列)
  7. java安全HTTPS工具类
  8. 关于ajax发送的数据问题
  9. java.net.UnknownHostException
  10. centos下使用nginx 配置websocket,https升级wss协议
  11. vs2015编译caffe
  12. uva12307(旋转卡壳)
  13. SQL 中GO的作用
  14. 安装 Minio服务
  15. 安装和配置hive
  16. random module
  17. Java Socket 多线程聊天室
  18. spring 接收前台ajax传来的参数的几个方法
  19. Spring Boot 的彩色日志
  20. onscroll事件没有响应的原因以及vue.js中添加onscroll事件监听的方法

热门文章

  1. iOS中自动登录的设计
  2. Google 发布的15个 Android 性能优化典范
  3. 9.11 翻译系列:数据注解特性之--Timestamp【EF 6 Code-First系列】
  4. Atitit 提升开发进度大方法--高频功能与步骤的优化 类似性能优化
  5. 【Android】GPS定位基本原理浅析
  6. cordova打包vue2(webpack)android、ios app
  7. Java知多少(25)再谈Java包
  8. 设置Git用户信息
  9. json转 PostMan bulk Edit application/x-www-form-urlencoded 需要的格式
  10. hibernate 查询全部数据的三种方法