实例介绍
【实例截图】
【核心代码】
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
{
/// <summary>
/// 系统信息类 - 获取CPU、内存、磁盘、进程信息
/// </summary>
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 构造函数
/// <summary>
/// 构造函数,初始化计数器等
/// </summary>
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个数
/// <summary>
/// 获取CPU个数
/// </summary>
public int ProcessorCount
{
get
{
return m_ProcessorCount;
}
}
#endregion
#region CPU占用率
/// <summary>
/// 获取CPU占用率
/// </summary>
public float CpuLoad
{
get
{
return pcCpuLoad.NextValue();
}
}
#endregion
#region 可用内存
/// <summary>
/// 获取可用内存
/// </summary>
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 物理内存
/// <summary>
/// 获取物理内存
/// </summary>
public long PhysicalMemory
{
get
{
return m_PhysicalMemory;
}
}
#endregion
#region 获得分区信息
/// <summary>
/// 获取分区信息
/// </summary>
public List<DiskInfo> GetLogicalDrives()
{
List<DiskInfo> drives = new List<DiskInfo>();
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;
}
/// <summary>
/// 获取特定分区信息
/// </summary>
/// <param name="DriverID">盘符</param>
public List<DiskInfo> GetLogicalDrives(char DriverID)
{
List<DiskInfo> drives = new List<DiskInfo>();
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 获得进程列表
/// <summary>
/// 获得进程列表
/// </summary>
public List<ProcessInfo> GetProcessInfo()
{
List<ProcessInfo> pInfo = new List<ProcessInfo>();
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;
}
/// <summary>
/// 获得特定进程信息
/// </summary>
/// <param name="ProcessName">进程名称</param>
public List<ProcessInfo> GetProcessInfo(string ProcessName)
{
List<ProcessInfo> pInfo = new List<ProcessInfo>();
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 结束指定进程
/// <summary>
/// 结束指定进程
/// </summary>
/// <param name="pid">进程的 Process ID</param>
public static void EndProcess(int pid)
{
try
{
Process process = Process.GetProcessById(pid);
process.Kill();
}
catch { }
}
#endregion
#region 获取 IP 地址信息
/// <summary>
/// 获取 IP 地址信息
/// </summary>
/// <returns></returns>
public static List<IpInfo> GetIpInfo()
{
//定义范型
List<IpInfo> ipinfos = new List<IpInfo>();
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
try
{
if ((bool)mo["IPEnabled"] == true)
{
string mac = mo["MacAddress"].ToString().Replace(':', '-');
System.Array ar = (System.Array)(mo.Properties["IpAddress"].Value);
string ip = ar.GetValue(0).ToString();
ipinfos.Add(new IpInfo(ip, mac));
}
}
catch { }
}
return ipinfos;
}
#endregion
#region 根据物理地址获取 IP 地址
/// <summary>
/// 根据物理地址获取 IP 地址
/// </summary>
/// <param name="MACAddress"物理地址></param>
/// <returns>IP 地址</returns>
public static string GetIpByMac(string MACAddress)
{
List<IpInfo> ipinfos = SystemInfo.GetIpInfo();
foreach (IpInfo ipinfo in ipinfos)
{
if (string.Compare(ipinfo.MACAddress, MACAddress, true) == 0)
{
return ipinfo.IPAddress;
}
}
return "";
}
#endregion
#region 根据 IP 地址获取物理地址
/// <summary>
/// 根据 IP 地址获取物理地址
/// </summary>
/// <param name="IPAddress"IP 地址></param>
/// <returns>物理地址</returns>
public static string GetMacByIp(string IPAddress)
{
List<IpInfo> ipinfos = SystemInfo.GetIpInfo();
foreach (IpInfo ipinfo in ipinfos)
{
if (string.Compare(ipinfo.IPAddress, IPAddress, true) == 0)
{
return ipinfo.MACAddress;
}
}
return "";
}
#endregion
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论