如何检查驱动器和CD-ROM的变化

ZDNet软件频道 时间:2003-08-13 作者:ZDNet China |  我要评论()
本文关键词:
如果你想得到光盘插入光驱或者系统添加了新驱动器的消息,那么检查Windows管理器(Windows Management Instrumentation,WMI)是一种简单的方法。
本文译自Builder.com,未经许可请勿转载如果你想得到光盘插入光驱或者系统添加了新驱动器的消息,那么检查Windows管理器(Windows Management Instrumentation,WMI)是一种简单的方法。

接收系统消息一般是一个比较烦杂的过程,不过WMI却提供了一个简单明了的解决方案。与其检查新硬件,你不如登记到WMI,这样如果系统安装或者改变了你感兴趣的硬件,你就会得到相应的消息。你还可以用WMI来调整系统并检查特定服务或者驱动是否存在以确保它可以正常运转。

当你收到这样的事件通知时,你可以根据应用程序所需而采取合适的动作。例如,假设你有一个程序需要读取光盘中的内容,你可以自动扫描光盘而不必等待用户告诉程序光盘已经插入。

设置通知

WMI基于一种叫着Web Based Enterprise Management(WBEM)的面向对象数据库,该数据库中填充了系统数据,例如系统安装了哪些硬件和软件。在面相对象的数据库中,我们把表格(table)称为类,把行(raw)称之为类的实例。

WMI在一个类中提供了系统大多数的硬件和软件信息。例如,当系统有光驱时,它就创建了一个Win32_CDROMDrive类的实例。

在WMI中有九种类型的事件,但是一般情况下你只需要使用其中的三种就足够了。我们在本文所举的例子中用到的事件类型是__InstanceCreationEvent__InstanceDeletionEvent以及__InstanceModificationEvent。其它六种类型的消息是类以及名字空间的添加、移除和修改。

下面C#代码用以设置光驱碟片发生变化的事件队列:

changeCDQuery = new WqlEventQuery(
"__InstanceModificationEvent",
new TimeSpan(0,0,1),
"TargetInstance isa "Win32_CDROMDrive""
               );

上面的代码建立了对任何光驱的任何改动的消息队列。现在,我们将建立一个ManagementEventWatcher实例。

changeCDWatcher = new ManagementEventWatcher(changeCDQuery);

然后,我们给changeCDWatcher对象添加一个事件回调(callback)。

changeCDWatcher.EventArrived += new EventArrivedEventHandler(ChangeCDHandler);

ChangeCDHandler方法有如下申明:

void ChangeCDHandler(object sender, EventArrivedEventArgs e)

现在,只要光驱中的介质发生变化,ChangeCDHandler就会被调用。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134