触发新插入的USB-HDD或USB-Stick设备

时间:2014-07-17 14:20:35

标签: c# .net

我想从新插入的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)
    {

    }
}

谢谢。

1 个答案:

答案 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