C#获取主机信息

获取主机信息

最近需要做一个配合集控系统收集各个终端设备的一些信息,大致需要收集终端设备的硬件信息,CPU、内存以及硬盘使用率等信息。网上查看了一番,使用WMI来获取这些信息是最方便的。实现代码如下:

 Models.PlatformInfo platformInfo = new Models.PlatformInfo();
string query = "Select * from {0}";
///获取操作系统数据
SelectQuery queryOS = new SelectQuery(string.Format(query, WindowAPIType.Win32_OperatingSystem));
ManagementObjectSearcher searcher = new ManagementObjectSearcher(queryOS);
foreach (ManagementBaseObject os in searcher.Get())
{
    platformInfo.Version = Convert.ToString(os["Version"]);
    platformInfo.Caption = Convert.ToString(os["Caption"]);
    platformInfo.SerialNumber = Convert.ToString(os["SerialNumber"]);
    platformInfo.SystemDirectory = Convert.ToString(os["SystemDirectory"]);
    platformInfo.OSArchitecture = Convert.ToString(os["OSArchitecture"]);
    platformInfo.InstallDate = Convert.ToString(os["InstallDate"]);
    platformInfo.Organization = Convert.ToString(os["Organization"]);
}

其中可以使用os.GetText(TextFormat.Mof);来获取详细的信息。
目前我查到的可以获取的API接口有如下:

/// <summary>
/// Window Api名称
/// </summary>
public enum WindowAPIType
{
    /// <summary>
    /// 内存
    /// </summary>
    Win32_PhysicalMemory,
    /// <summary>
    /// CPU
    /// </summary>
    Win32_Processor,
    /// <summary>
    /// 硬盘
    /// </summary>
    Win32_DiskDrive,
    /// <summary>
    /// 电脑型号
    /// </summary>
    Win32_ComputerSystemProduct,
    /// <summary>
    /// 分辨率
    /// </summary>
    Win32_DesktopMonitor,
    /// <summary>
    /// 显卡细节
    /// </summary>
    Win32_VideoController,
    /// <summary>
    /// 操作系统
    /// </summary>
    Win32_OperatingSystem,
    /// <summary>
    /// 网络适配器
    /// </summary>
    Win32_NetworkAdapter,
    /// <summary>
    /// 网络适配器设置
    /// </summary>
    Win32_NetworkAdapterConfiguration,
    /// <summary>
    /// 操作系统登录
    /// </summary>
    Win32_ComputerSystem,
    /// <summary>
    /// 键盘
    /// </summary>
    Win32_Keyboard,
    /// <summary>
    /// 点输入设备,包括鼠标
    /// </summary>
    Win32_PointingDevice,
    /// <summary>
    /// 主板
    /// </summary>
    Win32_BaseBoard,
    /// <summary>
    /// BIOS芯片
    /// </summary>
    Win32_BIOS,
    /// <summary>
    /// 光盘驱动盘
    /// </summary>
    Win32_CDROMDrive,
    /// <summary>
    /// 并口
    /// </summary>
    Win32_ParallelPort,
    /// <summary>
    /// 串口
    /// </summary>
    Win32_SerialPort,
    /// <summary>
    /// 串口配置
    /// </summary>
    Win32_SerialPortConfiguration,
    /// <summary>
    /// 多媒体,一般指声卡
    /// </summary>
    Win32_SoundDevice,
    /// <summary>
    /// 主板插槽(ISA&PCI&AGP)
    /// </summary>
    Win32_SystemSlot,
    /// <summary>
    /// USB控制器
    /// </summary>
    Win32_USBController,
    /// <summary>
    /// 打印机
    /// </summary>
    Win32_Printer,
    /// <summary>
    /// 打印机设置
    /// </summary>
    Win32_PrinterConfiguration,
    /// <summary>
    /// 打印机任务
    /// </summary>
    Win32_PrintJob,
    /// <summary>
    /// 打印机端口
    /// </summary>
    Win32_TCPIPPrinterPort,
    /// <summary>
    /// Modem
    /// </summary>
    Win32_POTSModem,
    /// <summary>
    /// MODEM端口
    /// </summary>
    Win32_POTSModemToSerialPort,
    /// <summary>
    /// 显卡
    /// </summary>
    Win32_DisplayConfiguration,
    /// <summary>
    /// 显卡设置
    /// </summary>
    Win32_DisplayControllerConfiguration,
    /// <summary>
    /// 显示支持显示模式
    /// </summary>
    Win32_VideoSettings,
    /// <summary>
    /// 时区
    /// </summary>
    Win32_TimeZone,
    /// <summary>
    /// 驱动程序
    /// </summary>
    Win32_SystemDriver,
    /// <summary>
    /// 磁盘分区
    /// </summary>
    Win32_DiskPartition,
    /// <summary>
    /// 逻辑磁盘
    /// </summary>
    Win32_LogicalDisk,
    /// <summary>
    /// 逻辑磁盘所在分区及始末位置
    /// </summary>
    Win32_LogicalDiskToPartition,
    /// <summary>
    /// 逻辑内存配置
    /// </summary>
    Win32_LogicalMemoryConfiguration,
    /// <summary>
    /// 系统页文件信息
    /// </summary>
    Win32_PageFile,
    /// <summary>
    /// 页文件设置
    /// </summary>
    Win32_PageFileSetting,
    /// <summary>
    /// 系统启动配置
    /// </summary>
    Win32_BootConfiguration,
    /// <summary>
    /// 系统自动启动程序
    /// </summary>
    Win32_StartupCommand,
    /// <summary>
    /// 系统安装的服务
    /// </summary>
    Win32_Service,
    /// <summary>
    /// 系统管理组
    /// </summary>
    Win32_Group,
    /// <summary>
    /// 系统组账号
    /// </summary>
    Win32_GroupUser,
    /// <summary>
    /// 用户账户
    /// </summary>
    Win32_UserAccount,
    /// <summary>
    /// 系统进程
    /// </summary>
    Win32_Process,
    /// <summary>
    /// 系统线程
    /// </summary>
    Win32_Thread,
    /// <summary>
    /// 共享
    /// </summary>
    Win32_Share,
    /// <summary>
    /// 已安装的网络客户端
    /// </summary>
    Win32_NetworkClient,
    /// <summary>
    /// 已安装的网络协议
    /// </summary>
    Win32_NetworkProtocol,
}

查询都是一致的:"Select * from {0}"
这样就能获取到想要获取到的信息了。
获取开机时间:

/// <summary>
/// 获取开机运行时间
/// </summary>
/// <returns></returns>
public string GetRunTime()
{
    TimeSpan ts = TimeSpan.FromMilliseconds(Environment.TickCount);
    return ts.ToString();
}

获取CPU使用率可以使用性能计数器组件。

private PerformanceCounter performance = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);

this.performance.MachineName = ".";
this.performance.NextValue();

/// <summary>
/// CPU使用率
/// </summary>
/// <returns></returns>
public string GetCPU()
{
    return this.performance.NextValue().ToString("F1") + "%";
}
原文地址:https://www.cnblogs.com/zzr-stdio/p/11156778.html