Mein Programm muss wissen, wann ein Benutzer die CD auswirft. Gibt es dafür eine Art Benachrichtigung in Windows?
Antworten
Zu viele Anzeigen?
jgallant
Punkte
10822
Hier ist ein VB-Code, der zeigt, wie es geht.
Shared Sub Main(ByVal args() As String)
Dim we As New WMIEvent
Dim w As ManagementEventWatcher = Nothing
Dim q As WqlEventQuery
Dim observer As New ManagementOperationObserver
' Bind to local machine
Dim opt As New ConnectionOptions
opt.EnablePrivileges = True 'sets required privilege
Dim scope As New ManagementScope("root\CIMV2", opt)
Try
q = New WqlEventQuery
q.EventClassName = "__InstanceModificationEvent"
q.WithinInterval = New TimeSpan(0, 0, 1)
' DriveType - 5: CDROM
q.Condition = "TargetInstance ISA 'Win32_LogicalDisk'" & _
" and TargetInstance.DriveType = 5"
w = New ManagementEventWatcher(scope, q)
' register async. event handler
AddHandler w.EventArrived, AddressOf we.CDREventArrived
w.Start()
' Do something usefull,block thread for testing
Console.ReadLine()
Catch e As Exception
Console.WriteLine(e.Message)
Finally
w.Stop()
End Try
End Sub 'Main
' Dump all properties
Public Sub CDREventArrived(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
' Get the Event object and display it
Dim pd As PropertyData = e.NewEvent.Properties("TargetInstance")
If Not (pd Is Nothing) Then
Dim mbo As ManagementBaseObject = pd.Value '
' if CD removed VolumeName == null
If Not (mbo.Properties("VolumeName").Value Is Nothing) Then
Console.WriteLine("CD has been inserted")
Else
Console.WriteLine("CD has been ejected")
End If
End If
End Sub 'CDREventArrived