• 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") + "%";
    }
    
  • 相关阅读:
    【006期】JavaSE面试题(六):泛型
    【005期】JavaSE面试题(五):String类
    【004期】JavaSE面试题(四):JavaSE语法(3)
    【003期】JavaSE面试题(三):JavaSE语法(1)
    【002期】JavaSE面试题(二):基本数据类型与访问修饰符
    【001期】 | JavaSE面试题(一):面向对象
    【000期】Java最全面试题库思维导图
    LeetCode 1. 两数之和(python3)实现
    虚拟网络学习笔记一:Linux虚拟网络
    快速排序(python实现)
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/11156778.html
Copyright © 2020-2023  润新知