您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:169 来源:vckbase.com

本文章共9845字,分6页,当前第1页,快速翻页:
 

WMI 的一个实现

作者:Paul Li

翻译:Abbey


原文出处:Code Project:Windows Management Instrumentation (WMI) Implementation

逆风者

源代码下载:wmi.zip(45KB)



介绍

  这是我在继上一篇文章"My Explorer"之后关于Windows Management Instrumentation(Windows管理规范)的又一新作。我将向你展示一些技巧,让你可以在远程地访问网络中其他计算机的操作系统、服务、当前运行着的进程等等信息,当然前提是你必须得拥有这些计算机的管理员权限。同时我也将向你展示如何利用WMI来启动或者停止服务、终止进程、创建进程。这是程序的主界面:

开始

  在这个WMI应用程序里,我创建了一个包含了四个用户控制的库WMIControlLibrary。这四个用户控制分别是Explorer,SystemInfo,Services与Processes。每个控制都有其特定的功用。以下是对每个控制作用的一个简单描述:

  • Explorer控制 我把我那个"My Explorer"转换成了一个用户控制,它还是用来显示你系统上的驱动器、目录、文件等信息。
  • SystemInfo 控制* 这个控制用来显示操作系统与硬件数据及清单等信息。
  • Services 控制* 这个控制用来显示系统当前运行着的服务。
  • Process 控制* 这个控制用来显示系统当前运行着的进程。

(*注意:这个控制可以用来监控本地或者网络上的远程系统。)

上述的每个控制都引用了System.Management命名空间,以保证它们能访问各自特定的系统信息。

控制的状态事件

  这其中的一些控制需要点时间才能从系统获取相关的信息,因此我在每个控制中都实现了一个事件UpdateStatus(string e)。这样每个控制就可以更新主应用程序窗体的状态条,用户也能很清楚地知道控制正在干什么了。

//控制内部的代码

//声明一个Status的事件委托类型

public delegate void Status(string e);





//声明了一个更新状态的事件



public event Status UpdateStatus;





//更新状态条

UpdateStatus("Hello world.");



//主程序代码

//用参数中的字符串刷新状态条的显示文本

private void refreshStatusBar(string stringStatus)

{

    //更新状态条

    statusBarStatus.Text = stringStatus;

}

Explorer 控制

  在Explorer控制内部,我使用了WMI的Win32_LogicalDisk类来访问所有本地的及网络映射的驱动器。要访问驱动器的相关信息,我得先使用一个ManagementObjectSearcher对象来获取一个包含了我所需驱动器信息的ManagementOjbectCollection对象(译注:原文用的是class,我认为不准确,因此改译为对象)。之后,我们就可以自由支配所有这些驱动器的信息。(比如驱动器名、类型、卷标、标识等等)。你也可以只查询剩余空间低于1MByte的驱动器的信息,对此只需要改变ManagementObjectSearcher参数而已:

//译注:这句就是查询剩余空间低于1MByte的SQL语句,用在ManagementObjectSearcher的构造时。

//是不是很象一般数据库编程里用的SQL语句啊?

Select * From Win32_LogicalDisk Where FreeSpace < 1000000



//取得驱动器集

ManagementObjectSearcher query = 
new ManagementObjectSearcher ("SELECT * From Win32_LogicalDisk "); ManagementObjectCollection queryCollection = query.Get(); //遍历每个对象,以获取每个驱动器的信息 foreach ( ManagementObject mo in queryCollection) { switch (int.Parse( mo["DriveType"].ToString())) { case Removable: //可移动驱动器 imageIndex = 5; selectIndex = 5; break; case LocalDisk: //本地驱动器 imageIndex = 6; selectIndex = 6; break; case CD: //CD-ROM驱动器 imageIndex = 7; selectIndex = 7; break; case Network: //网络驱动器 imageIndex = 8; selectIndex = 8; break; default: //缺省:文件夹 imageIndex = 2; selectIndex = 3; break; } //获取驱动器名 Console.WriteLine("Drive: " mo["Name"].ToString()); }
 
本文章更多内容1 - 2 - 3 - 4 - 5 - 6 - 下一页>>
相关文章

定制调试诊断工具和实用程序——摆脱DLL“地
VC初学者入门系列之二:消息循环
PhotoShop插件开发之选区(Selection)
编写多文档应用程序
COM 组件设计与应用(五)——用 ATL 写第一
MFC程序员的WTL指南: 中文版序言
不重起Windows直接更改IP地址
类似于FlashGet的悬浮框的制作
毫秒定时器
C :使用 Visual C 2005 的现代语言特色
自绘按钮的实现
《系统飞狐》系列软件中的“系统监视器”开
定时显示远程计算机的桌面
一个实用的CToolBar扩展类CToolBarEx
简单实用的Xml解析类
SQL Server 索引结构及其使用(三)
图形显示特技算法
论程序设计方法
可以替代系统记事本的程序
Visual Basic .NET 中多 Windows 窗体的同步

相关评论


本文章所属分类:首页 VC++

  热门关键字: