【问题标题】:How to get notified when a drive letter becomes available如何在驱动器号可用时收到通知
【发布时间】:2008-10-05 15:06:08
【问题描述】:

当驱动器号可访问时,是否可以获得通知(无需轮询,但通过事件)。例如,如果您有一个始终显示为驱动器 F 的外部硬盘驱动器 - 是否有可能在连接该驱动器并且 F 变得可访问时引发事件?

【问题讨论】:

    标签: .net filesystems


    【解决方案1】:

    好的..找到我要找的东西:)

    看看这个 VBScript: (source):

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
    Set colEvents = objWMIService.ExecNotificationQuery _
        ("Select * From __InstanceOperationEvent Within 10 Where " _
            & "TargetInstance isa 'Win32_LogicalDisk'")
    
    Do While True
        Set objEvent = colEvents.NextEvent
        If objEvent.TargetInstance.DriveType = 2 Then 
            Select Case objEvent.Path_.Class
                Case "__InstanceCreationEvent"
                    Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
                        " has been added."
                Case "__InstanceDeletionEvent"
                    Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
                        " has been removed."
            End Select
        End If
    Loop
    

    我把它留给你练习把它移植到 C#。

    您可以使用WMI event sink,而不是一直轮询。

    【讨论】:

      【解决方案2】:

      您可以等待 WM_DEVICECHANGE 消息,所有详细信息都在:

      http://msdn.microsoft.com/en-us/library/aa363215(VS.85).aspx

      您将不得不创建一个窗口来接收此消息,如果需要,可以隐藏该窗口,在 WinForms 中获取此消息只需覆盖 Form.WndProc 方法

      【讨论】:

        猜你喜欢
        • 2011-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        相关资源
        最近更新 更多