【发布时间】:2016-04-25 06:20:19
【问题描述】:
我写了一个c#程序来查找新插入的USB驱动器及其驱动器号。现在,当我运行这个程序时,我得到了插入事件并且无法获得驱动器号。任何人都可以建议我这样做吗?
代码
static void Main(string[] args)
{
ManagementEventWatcher mwe_creation; //Object creation for 'ManagementEventWatcher' class is used to listen the temporary system event notofications based on specific query.
WqlEventQuery q_creation = new WqlEventQuery(); //Represents WMI(Windows Management Instrumentation) event query in WQL format for more information goto www.en.wikipedia.org/wiki/WQL
q_creation.EventClassName = "__InstanceCreationEvent";// Sets the eventclass to the query
q_creation.WithinInterval = new TimeSpan(0, 0, 2); // Setting up the time interval for the event check(here, it is 2 Seconds)
q_creation.Condition = @"TargetInstance ISA 'Win32_DiskDriveToDiskPartition'"; //Sets which kind of event to be notified
mwe_creation = new ManagementEventWatcher(q_creation); //Initializing new instance
mwe_creation.EventArrived += new EventArrivedEventHandler(USBEventArrived_Creation);//Calling up 'USBEventArrived_Creation' method when the usb storage plug-in event occured
mwe_creation.Start(); // Starting to listen to the system events based on the given query
while (true) ;
}
static void USBEventArrived_Creation(object sender, EventArrivedEventArgs e){
Console.WriteLine("USB PLUGGED IN!");
ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"];
foreach (var property in instance.Properties)
{
if (property.Name == "Name")
Console.WriteLine(property.Name + " = " + property.Value);
}
}
【问题讨论】:
-
你试过这个 var drive = DriveInfo.GetDrives() .Where(drive => drive.IsReady && drive.DriveType == DriveType.Removable);
-
这将选择系统中存在的所有可移动驱动器
-
看看这个 satckoverflow 链接它有太多信息stackoverflow.com/questions/6003822/…
-
我从codeproject.com/Messages/2126647/Re-Csharp-USB-Detection.aspx 找到了一个解决方案,他们使用
TargetInstance ISA 'Win32_LogicalDisk'而不是TargetInstance ISA 'Win32_DiskDriveToDiskPartition',它对我有用。 -
我仍然不知道它为什么会起作用,因为我所有的 USB 闪存驱动器都是主分区。谁能解释一下?