获取主机信息

最近需要做一个配合集控系统收集各个终端设备的一些信息,大致需要收集终端设备的硬件信息,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") + "%";
}

C#获取主机信息的更多相关文章

  1. Linux 网络编程基础(2)-- 获取主机信息

    前一篇已经介绍了最基本的网络数据结构.这篇介绍一下获取主机信息的函数 举个例子,想要通过代码的方式从百度获取当前的时间,怎么做?我们不知道百度的IP地址啊,这代码怎么写?还好,Linux提供了一些AP ...

  2. PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息

    最近项目需要获取linux主机的一些信息,如CPU使用率,内存使用情况等.由于我们本身就装了zabbix系统,所以我只用知道如何获取信息即可,总结有两种方法可以获取. 一.通过ZABBIX API获取 ...

  3. 获取主机信息,网络信息AIP,getsockname,getpeername,getservbyname,getservbyport,inet_ntop,inet_pton

    获取主机信息 1.ip地址转换,主机字节序 <---> 网络字节序 #include <arpa/inet.h> int inet_pton(int af, const cha ...

  4. 【Java实用工具】——使用oshi获取主机信息

    最近在筹划做一个监控系统.其中就要获取主机信息,其中遇到一些问题.在此做个记录,以便以后查阅. 在该监控系统中,想要做到主机的CPU.内存.磁盘.网络.线程.JVM内存.JVM GC 等维度的监控,J ...

  5. paramiko获取主机信息

    import re import paramiko host="192.168.4.88" user = "root" password = " cl ...

  6. python 调用zabbix api实现查询主机信息,输出所有主机ip

    之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python ...

  7. 02.将SDK获取到的ECS主机信息入库

    1.通过调用阿里SDK,将获取到的ECS信息存入数据库,如果不知道SDK怎么使用,查看:01.阿里云SDK调用,获取ESC主机详细信息 2.import aliSDK应用的是01.阿里云SDK调用,获 ...

  8. 使用gethostname()函数和gethostbyname()函数获取主机相关信息

    gethostname() : 返回本地主机的标准主机名. 原型如下: #include <unistd.h> int gethostname(char *name, size_t len ...

  9. 主机性能监控之wmi 获取磁盘信息

    标 题: 主机性能监控之wmi 获取磁盘信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990541.html 欢迎转帖 请保持文本完整并注明出处 仅 ...

随机推荐

  1. C++入门经典-例3.2-根据分数判断是否优秀

    1:代码如下: // 3.2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  2. python dict字典添加元素

    已存在的字典进行赋值操作 可为该字典添加新元素例子:a = {‘age’: 23, ‘name’: ‘lala}a[school] = ‘nanhaizhongxue’print a>>& ...

  3. win2003 64位系统IIS配置方法

    IIS7 很简单,在网站对应的应用程序池上右键高级设置,常规里的启用32位应用程序改为true就可以了,IIS6稍微复杂一些, 1,命令行里运行 cscript.exe %SYSTEMDRIVE%\i ...

  4. vue组件化之模板优化及注册组件语法糖

    vue组件化之模板优化及注册组件语法糖 vue组件化 模板 优化  在 https://www.cnblogs.com/singledogpro/p/12054895.html 这里我们对vue.js ...

  5. 5.Python使用模块

    1.模块的 作用 2.模块的含义 3.模块的 导入  因此模块能够划分系统命名空间,避免了不同文件的变量重名的问题.                 Python的模块使得独立的文件连接成了一个巨大 ...

  6. 浅谈2-SAT

    引入: 相信大家都了解过差分约束系统.差分约束系统的大体意思就是给出一些有某种关系的变量,问你是否有某种赋值使得这些关系全部成立 其实\(2-SAT\)的题目描述和这个很像(虽然解法不一样) 那么\( ...

  7. vue 钩子函数中获取不到DOM节点

    原文链接:https://jingyan.baidu.com/article/f96699bbfe9c9d894f3c1b4b.html 两种解决方案: 1:官方解决方案: 受到 HTML 本身的一些 ...

  8. Computer Network Homework2’s hard question

    Computer Network Homework2’s hard question 2. What is the signal which is used to modulate the origi ...

  9. flutter GestureDetector点击区域

    使用GestureDetector包裹Container,发现在Container内容为空的区域点击时,捕捉不到onTap点击事件. 解决方案:在GestureDetector里面添加属性: beha ...

  10. 简单方法让input date支持placeholder(包含ios手机端方法)

    <input class="baixin-quan-info-box-time" type="text" onfocus="(this.type ...