我想从新插入的USB-Media(例如HardDisks,USBSticks,CD-Cards等)获取Drive-Letter。
请注意:我只想要新插件。不是现有的。
例如: 用户插入USB记忆棒。方法应返回:" F:"
例2: 用户插入带有两个分区的外置硬盘。方法应返回:" G:"和" H:"
我有以下代码:但它只是触发插入。不是Drive-Letter。
public void TrigerUSBInsert()
{
try
{
WqlEventQuery w = new WqlEventQuery
{
EventClassName = "__InstanceCreationEvent",
Condition = "TargetInstance ISA 'Win32_USBControllerDevice'",
WithinInterval = new TimeSpan(0, 0, 2)
};
ManagementEventWatcher watch = new ManagementEventWatcher(w);
watch.EventArrived += new EventArrivedEventHandler(this.usbDetectionHandler);
watch.Start();
}
catch (Exception exception)
{
}
}
谢谢。
答案 0 :(得分:0)
尝试使用Win32_LogicalDisk而不是Win32_USBControllerDevice。
一旦创建Win32_LogicalDisk,就会触发此操作,这在插入USB驱动器时会发生。安装任何其他磁盘驱动器(如S-ATA HDD)时也会发生这种情况,但大多数情况下都不会在运行时安装这些磁盘驱动器(当然还有热插拔系统)。
编辑:
哦,我忘了:你需要通过以下方式获取ManagementObject:
ManagementBaseObject o = (ManagementBaseObject) args.NewEvent.Properties["TargetInstance"].Value;
通过它,您可以遍历其属性:
foreach (PropertyData pd in o.Properties)
{
Console.WriteLine("{0}: \t {1}", pd.Name, pd.Value);
}
其中一个属性是驱动器号。
(有关其属性列表和可用的Win32_类,请参见此处:http://msdn.microsoft.com/en-us/library/aa394173(v=vs.85).aspx