1

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

4

2 回答 2

1

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

看看这个 VBScript:(来源):

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 事件接收器,而不是一直轮询。

于 2008-10-05T15:23:27.027 回答
1

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

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

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

于 2008-10-05T15:44:49.480 回答