C#:如何让程序在后台能捕获光驱换盘的操作? 打开"服务器管理器",选择"连接到服务器"展开"事件日志"->"系统"->"CDROM" 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.zdnet.com.cn/i/developer/story/200308/39156191/C0620.zip这是例子。 using System;using System.Management;namespace ConsoleApplication1 { class Class1 { [STAThread] static void Main(string[] args) { Class1 c1 = new Class1(); Console.ReadLine(); } private ManagementEventWatcher changeCDWatcher; public Class1(){ WqlEventQuery changeCDQuery = new WqlEventQuery( "__InstanceModificationEvent", new TimeSpan(0,0,1), "TargetInstance isa \"Win32_CDROMDrive\"" ); changeCDWatcher = new ManagementEventWatcher(changeCDQuery); changeCDWatcher.EventArrived += new EventArrivedEventHandler(ChangeCDHandler); changeCDWatcher.Start(); } void ChangeCDHandler(object sender, EventArrivedEventArgs e){ string drive = ((ManagementBaseObject)(e.NewEvent["TargetInstance"]))["Drive"].ToString(); Console.WriteLine("Driver{0} was changed.", drive); } }} 首先很感谢铅笔同志的回答,但是有两个问题: 问题1:我在使用改程序监控时发现ChangeCDHandler会时不时得捕获到换盘的信息,不停得打出我cdrom里现有的盘的信息,但是另一个NewDriveHandler确不会发生这种情况,连接上一个usb移动硬盘后,只出现一次连接到新Drive的信息. 问题2:虽然ChangeCDHandler没有问题,但是RemovedDriveHandler确完全不起作用,我很纳闷:难道要我不用弹出拔掉硬盘才能捕获到句柄的吗?试了后,还是没有RemovedDriveHandler的信息出现... 另外想问一下有没有RemoveCDHandler的方法?? 另外请问 tacittui 的回答是什么意思?我的"事件日志"->"系统"->"里面没有CDRom一项,铅笔同志你有吗? "不停得打出我cdrom里现有的盘的信息"有可能是因为虚拟光驱. 第一个问题,如graying(Graying.net) 所言,只有虚拟光驱报这个信息。第二个问题,我这里不出现。;-(我的系统请参考:Windows 2003 Server, 简体中文,专业版。VS.Net 2003简体中文版。 如何使泛型的参数是通用的? 因为这道题我被解聘(C#) .net安装部署出现问题 C#调用VC的DLL涉及到结构参数,急啊 几个菜鸟问题 CommandBarButton这个类型 C#编写ASP.NET 中当textbox的textmode为password时,如何给它赋值? C#如何直接操纵word? 新年快乐 急招C#高级工程师两名 如何使treeview中的某一节点处于可编辑状态 如何把TextBox输入的较长的数软化为int型
这是例子。
using System.Management;namespace ConsoleApplication1 {
class Class1 { [STAThread]
static void Main(string[] args) {
Class1 c1 = new Class1();
Console.ReadLine();
} private ManagementEventWatcher changeCDWatcher; public Class1(){
WqlEventQuery changeCDQuery = new WqlEventQuery(
"__InstanceModificationEvent",
new TimeSpan(0,0,1),
"TargetInstance isa \"Win32_CDROMDrive\""
);
changeCDWatcher = new ManagementEventWatcher(changeCDQuery);
changeCDWatcher.EventArrived += new EventArrivedEventHandler(ChangeCDHandler);
changeCDWatcher.Start();
} void ChangeCDHandler(object sender, EventArrivedEventArgs e){
string drive = ((ManagementBaseObject)(e.NewEvent["TargetInstance"]))["Drive"].ToString();
Console.WriteLine("Driver{0} was changed.", drive);
}
}
}
问题1:我在使用改程序监控时发现ChangeCDHandler会时不时得捕获到换盘的信息,不停得打出我cdrom里现有的盘的信息,但是另一个NewDriveHandler确不会发生这种情况,连接上一个usb移动硬盘后,只出现一次连接到新Drive的信息.
问题2:虽然ChangeCDHandler没有问题,但是RemovedDriveHandler确完全不起作用,我很纳闷:难道要我不用弹出拔掉硬盘才能捕获到句柄的吗?试了后,还是没有RemovedDriveHandler的信息出现... 另外想问一下有没有RemoveCDHandler的方法??
第二个问题,我这里不出现。;-(
我的系统请参考:
Windows 2003 Server, 简体中文,专业版。
VS.Net 2003简体中文版。