WMI 使用教程_.NET 入门教程
WMI 使用教程_.NET 入门教程
先介绍一下WMI 相关知识:
什么是WMI 呢? Windows 管理规范 (Windows Management Instrumentation ),它的主要功
能包括:访问本地主机的一些信息和服务,可以远程管理计算机(当然你必须拥有足够的权限)
也就是说可以象重起,关机,关闭进程,创建进程等等!
有了初步了解下面我门开始一些初步的工作吧:
在这个WMI 程序中,我将实现四个基本功能:
1.Explorer 类似与windows 里的资源管理器
2.SystemInfo 查看你的硬件信息和OS 信息
3.Services 当前正在工作的信息
4.Processes 当前执行的进程
(这里是可以管理远程和本地OS 的)
好了,我们要开始实现访问我们的OS 了,不过在这之前我们必须要引入System.Management
这个命名空间
下面让我们了解一下控件的状态事件
我们必须保证是实时的所以必须在这里包涵UpdateStatus(string e)该事件(这是一个自定
义的)
这里主要是希望在点击每个控件时刷新状态栏,可以让用户知道程序在做什么!
代码事例:
//控件代码
//状态事件的代理
public delegate void Status(string e);
public event Status UpdateStatus;
//这里更新状态栏
UpdateStatus("Hello world.");
//这里是在主程序里的代码
//写具体的事件代码
private void refreshStatusBar(string stringStatus)
{
//update status bar
statusBarStatus.Text = stringStatus;
}
下面是具体代码:
Explorer Control
这里首先介绍一下WMI的 Win32_LogicalDisk类(参考Platform SDK: Windows Management
Instrumentation),通过它我们可以查看到本地驱动器
的一些详细情况,我们还需要用到System.Management中的两个类
ManagementObjectSearcher
和ManagementOjbectCollection它们的作用主要是ManagementObjectSearcher将查询到了
ManagementOjbectCollection该对象的集合中去(这里可以获取的驱动器信息包括 驱动器
的名称
,类型,描述信息等)当然你也可以只查看驱动器的部分信息可以在
ManagementObjectSearcher类
的构造函数中这样写ManagementObjectSearcher query = new
ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); (参考Platform SDK:
Windows Management Instrumentation)
代码如下:
//get drive collection
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From
Win32_LogicalDisk ");
ManagementObjectCollection queryCollection = query.Get();
//loop throught each object to get drive information
foreach ( ManagementObject mo in queryCollection)
{
switch (int.Parse( mo["DriveType"].ToString()))
{
case Removable: //removable drives
imageIndex = 5;
selectIndex = 5;
break;
case LocalDisk: //Local drives
imageIndex = 6;
selectIndex = 6;
break;
case CD: //CD rom drives
imageIndex = 7;
selectIndex = 7;
break;
case Network: //Network drives
imageIndex = 8;
selectIndex = 8;
break;
default: //defalut to folder
imageIndex = 2;
selectIndex = 3;
break;
}
//get drive name
Console.WriteLine("Drive: " + mo["Name"].ToString());
}
SystemInfo Control
该控件主要用来查看本地或远程主机的OS和硬件信息,这里需要用到另外两个
对象ConnectionOptions和ManagementScope,ConnectionOptions主要是设置
WMI连接信息的,如用户名和密码,这里我们主要用到它的两个属性UserName和
Password; ManagementScope对象表示WMI的规范,通过该规范可以访问服务器
和命名空间的路径已及使用ConnectionOptions中的设置
请看如下代码:
//Connect to the remote computer
ConnectionOptions co = new ConnectionOptions();
co.Username = textUserID.Text;
co.Password = textPassword.Text;
//Point to machine
System.Management.ManagementScope ms = new
System.Management.ManagementScope("\\\\" +
stringHostName + "\\root\\cimv2", co);
现在我们结合刚才的知识来得到我们要的信息,但我们要得到那些我们想要信息呢?
那样的话我们就必须要用到ObjectQuery对象,通过它我们可以得到我们想要的查询
信息.把ObjectQuery对象和ManagementScope对象放入ManagementObjectSearcher对象
中这样就可以通过我们设置好的规范和我们设置好的查询得到我们想要的结果,当然
还必须要掉用ManagementObjiectSearcher的Get()方法,它会返回一个ManagementObject
对象的集合,然后可以通过结合操作来访问到每一个我们要的信息.
代码如下:
//Query system for Operating System information
oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem");
query = new ManagementObjectSearcher(ms,oq);
queryCollection = query.Get();
foreach ( ManagementObject mo in queryCollection)
{
//create child node for operating system
createChildNode(nodeCollection, "Operating System: " + mo["Caption"]);
createChildNode(nodeCollection, "Version: " + mo["Version"]);
createChildNode(nodeCollection, "Manufacturer : " + mo["Manufacturer"]);
createChildNode(nodeCollection, "Computer Name : " +mo["csname"]);
createChildNode(nodeCollection, "Windows Directory : " + mo["WindowsDirectory"]);
}
要是你只是希望查看到本地主机的信息,你就没必要去创建 ConnectionOption,
ManagementScope,ObjectQuery 对象,你仅仅只需要把ManagementObjectSearcher
对象的结果在ManagementObjectCollection集合里去调用Get()方法既可.
代码如下:
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From
Win32_OperatingSystem");
ManagementObjectCollection queryCollection = query.Get();
这里只是介绍了OS信息的方法,其它的如Bios,Memory.Network Connection等信息的查看
只需要把查询字改改就可以了!(可参考Platform SDK: Windows Management
Instrumentation)
Service Control控件介绍:
该控件要用到一个新的查询字"SELECT * FROM Win
点击查看更多:http://wenku.it168.com/d_000687766.shtml
转载于:https://www.cnblogs.com/yun111/archive/2013/01/06/2847415.html
WMI 使用教程_.NET 入门教程相关推荐
- python3.72教程_python3教程_编程入门教程_牛客网
Python3 命令行参数 Python 提供了 getopt 模块来获取命令行参数. $ python test.py arg1 arg2 arg3 Python 中也可以所用 sys 的 sys. ...
- mysql程序设计教程_MySQL教程_编程入门教程_牛客网
MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...
- pyqt5菜鸟教程_[ PyQt入门教程 ] PyQt5信号与槽
信号和槽是PyQt编程对象之间进行通信的机制.每个继承自QWideget的控件都支持信号与槽机制.信号发射时(发送请求),连接的槽函数就会自动执行(针对请求进行处理).本文主要讲述信号和槽最基本.最经 ...
- jQuery教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 jQuery入门教程 - 从简单的步骤开始了解jQuery,从基本到高级概念,包括jQuery概述,基础知识,选择器,属性,遍历,CSS,DOM操作,AJAX支持,拖放,效果,事件处理,UI ...
- EJB教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 EJB入门教程 - 从简单的步骤了解EJB 3.0和3.1(Enterprise Java Bean)框架,从基本概念到高级概念,包括概述,环境设置,应用服务器,容器,企业Bean,注释,会 ...
- python爬图片代码大全_爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据
经过了前面的努力,我们成功获取到了数据,并且学会了保存,但是只是用网页展示出来,是不是有一些不够美观呢? 所以本节的内容是:数据的可视化.拿到了数据却不能使其简单易懂并且足够突出,那就是不是好的数据工 ...
- Perl教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 Perl入门教程 - 从基本到高级概念的简单简单步骤了解Perl,包括简介,环境,语法,数据类型,变量,标量,数组,哈希,IF ... ELSE,循环,运算符,日期和时间,子程序,引用,格式 ...
- PHP 7 教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 PHP7入门教程 - 从简单的步骤了解PHP 7,从基本到高级概念,包括简介,性能,环境设置,标量类型声明,返回类型声明,空值合并运算符,Spaceship运算符,常量数组,匿名类,Clos ...
- Docker教程(一) Docker入门教程
Docker教程(一) Docker入门教程 本文链接:https://blog.csdn.net/yuan_xw/article/details/51935278 Docker教程(一) Docke ...
最新文章
- excel导入SQL脚本
- 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)
- R语言使用gganimate包和ggforce包可视化动画并动态缩放(zoom)移动动画的内容
- Linux调优方案,sysctl.conf的设置
- 记录docker常用的command
- 更新整理本人所有博文中提供的代码与工具(C++,2013.11)
- java 代码同步_Java同步代码块 转
- python中的self含义及使用方法
- 2014 Red Hat Summit(红帽峰会)PPT合集
- windows和linux通过网线连接,用网线连接Windows和Linux台式机,并实现Linux共享Windows的WiFi网络...
- zuc算法代码详解_ZUC算法原理及实现过程[共3页]
- 装了冰点还原如何修改计算机ip,冰点还原软件如何使用
- 模拟信号与数字信号的本质区别
- Java Web基础
- 【vue】【intersectionObserver】滚动正文时菜单滚动到对应菜单
- 检查内存泄露的利器--VLD使用指南
- win10调节键盘灵敏度的方法
- html菱形开头做无序,css3 做菱形
- Stack的概念和算法应用
- 项目经理成长之路---PMP、管理知识、项目文档、项目管理软件工具、PPT、WORD
热门文章
- python api接口生成_Django 自动生成api接口文档教程
- php中mysql_fetch_row_php中的mysql_fetch_row,mysql_fetch_array,mysql_fetch_object
- C语言 | 结构体数组
- 前后端分离的项目部署到tomcat_前后端分离后,tomcat服务器部署和发布
- 安川机器人编程加电弧_安川AR2010机器人
- python3 线程隔离_Python的线程隔离实现方法
- react动态改变选中不选中_当使用react hooks选中任何复选框时,如何使启用按钮起作用?...
- 串口服务器应用领域及应用方案详解
- 【渝粤题库】陕西师范大学209006教育政策与法规作业(高起专、高起本)
- 【渝粤教育】 国家开放大学2020年春季 2245社会福利与保障 参考试题