Mein Programm muss wissen, wenn ein Benutzer CD-Disc auswirft. Gibt es dafür eine Benachrichtigung in Windows?CD-Ausgabe Benachrichtigung in Windows
2
A
Antwort
5
Für non-.NET Sprachen, können Sie eine Nachricht Handler für die WM_DEVICECHANGE Nachricht hinzufügen und prüfen, ob ein WPARAM von DBT_DEVICEREMOVECOMPLETE. Die LPARAM zeigt auf eine DEV_BROADCAST_HDR-Struktur; es ist dbch_devicetype member gibt den Devicetype.
3
Hier ist ein VB-Code, der Ihnen zeigt, wie es gemacht wird.
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