1

ドライブ文字がアクセス可能になったときに (ポーリングなしで、イベントを介して) 通知を受け取ることは可能ですか? たとえば、常にドライブ F として表示される外付けハード ドライブがある場合、それが接続されて F がアクセス可能になったときにイベントを発生させることは可能ですか?

4

2 に答える 2

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 イベント シンクを使用できます。

于 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 に答える