【发布时间】:2008-10-05 15:06:08
【问题描述】:
当驱动器号可访问时,是否可以获得通知(无需轮询,但通过事件)。例如,如果您有一个始终显示为驱动器 F 的外部硬盘驱动器 - 是否有可能在连接该驱动器并且 F 变得可访问时引发事件?
【问题讨论】:
标签: .net filesystems
当驱动器号可访问时,是否可以获得通知(无需轮询,但通过事件)。例如,如果您有一个始终显示为驱动器 F 的外部硬盘驱动器 - 是否有可能在连接该驱动器并且 F 变得可访问时引发事件?
【问题讨论】:
标签: .net filesystems
好的..找到我要找的东西:)
看看这个 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,而不是一直轮询。
【讨论】:
您可以等待 WM_DEVICECHANGE 消息,所有详细信息都在:
http://msdn.microsoft.com/en-us/library/aa363215(VS.85).aspx
您将不得不创建一个窗口来接收此消息,如果需要,可以隐藏该窗口,在 WinForms 中获取此消息只需覆盖 Form.WndProc 方法
【讨论】: