Überwachen Sie USB-Laufwerke und rufen Sie Geräteinformationen mit einem DeviceWatcher ab?
Ich bin einWinForms Entwickler und ich wussten bereits, wie man die USBs überwacht, die über WMI verbunden oder getrennt werden, aber vor einiger Zeit hatte ich die entdecktDeviceWatcher Diese Klasse hat sich auf den ersten Blick für moderne Windows - Apps interessiert, denn sie scheint eine sehr verbesserte und effiziente Alternative zu sein, um all die "alten" WMI - Codes zu ersetzen, mit denen erklärt wird, wie Laufwerke über das Internet überwacht werdendieser Beitrag) Ich habe keine Ahnung, wie der DeviceWatcher in einem WinForms-Projekt verwendet wird, aber jetzt verwende ich den DeviceWatcher in einem WinForms-Projekt.
Das Problem ist, dass ich mich vielleicht irre, aber ich denke, dass dies nicht wirklich das ist, was ich erwartet habe. Ich kann nur keine Dokumentation über den DeviceWatcher finden (nur das MSDN-Beispiel oben) und den Weg dorthin nicht finden Ich habe versucht, alle Ereignisse des DeviceWatcher zu verarbeiten, um in der Debug-Konsole alle in den Argumenten enthaltenen Daten auszudrucken, in der Hoffnung, etwas zu finden, das mir helfen könnte nicht, ich bin sehr mit der Verwendung der steckenDeviceWatcher Klasse und ich können mir nicht vorstellen, wie ich vorgehen soll.
Beim Anschließen oder Trennen eines USB-Geräts werden nur zwei Dinge angezeigt: die Hardware-ID und die Eigenschaft "InterfaceEnabled" (von der ich nicht weiß, ob sie die Geräteverfügbarkeit bestimmt).
Was ich erreicht habe:
· Abrufen der Hardware-Geräte-IDs.
Was möchte ich erreichen:
· Abrufen des Gerätetyps (zur Unterscheidung zwischen USB- und anderen Gerätetypen), wenn das Gerät angeschlossen, getrennt oder getrennt ist.
· Abrufen der Geräteverfügbarkeit (ich meine, ob auf das Gerät Lese- / Schreibzugriff besteht), wenn das Gerät verbunden, getrennt und getrennt ist.
· Rufen Sie den Gerätebuchstaben ab, wenn das Gerät verbunden, getrennt und getrennt ist.
· Rufen Sie die Gerätebeschriftung ab, wenn das Gerät verbunden, getrennt und getrennt ist.
Der Code:
Public Class DeviceWatcher_Test
Private WithEvents dw As DeviceWatcher = DeviceInformation.CreateWatcher
' It's suposed that these properties should exist in the "e.properties" on the "dw_updated" event?, not in my case.
' Dim props As String() = {"System.ItemNameDisplay", "System.Devices.ModelName", "System.Devices.Connected"}
Private Sub Test() Handles MyBase.Load
dw.Start()
End Sub
Private Sub dw_Added(ByVal sender As DeviceWatcher, ByVal e As DeviceInformation) _
Handles dw.Added
Dim sb As New System.Text.StringBuilder
With sb
.AppendLine("dw_added")
.AppendLine("********")
.AppendLine(String.Format("Interface ID.: {0}", e.Id))
.AppendLine(String.Format("Friendly Name: {0}", e.Name))
.AppendLine(String.Format("Is Enabled?..: {0}", e.IsEnabled))
End With
Debug.WriteLine(sb.ToString)
End Sub
Private Sub dw_Removed(ByVal sender As DeviceWatcher, ByVal e As DeviceInformationUpdate) _
Handles dw.Removed
Dim sb As New System.Text.StringBuilder
With sb
.AppendLine("dw_Removed")
.AppendLine("**********")
.AppendLine(String.Format("Interface ID:{0}", e.Id))
For Each item As KeyValuePair(Of String, Object) In e.Properties
.AppendLine(String.Format("TKey:{0}, TVal:{1} (TVal Type:{2})",
item.Key, item.Value.ToString, item.Value.GetType.Name))
Next
End With
Debug.WriteLine(sb.ToString)
End Sub
Private Sub dw_Updated(ByVal sender As DeviceWatcher, ByVal e As DeviceInformationUpdate) _
Handles dw.Updated
Dim sb As New System.Text.StringBuilder
With sb
.AppendLine("dw_Updated")
.AppendLine("**********")
.AppendLine(String.Format("Interface ID: {0}", e.Id))
For Each item As KeyValuePair(Of String, Object) In e.Properties
If item.Key.EndsWith("InterfaceEnabled", StringComparison.OrdinalIgnoreCase) Then
Dim Result As Boolean = CBool(item.Value)
' I'm not sure whether the 'Result' value really determines this:
.AppendLine(String.Format("The device is accessible?:{0}", CStr(Result)))
Else
.AppendLine(String.Format("TKwy:{0}, TVal:{1} (TVal Type:{2})",
item.Key, item.Value.ToString, item.Value.GetType.Name))
End If
Next
End With
Debug.WriteLine(sb.ToString)
End Sub
Private Sub dw_Stopped(ByVal sender As DeviceWatcher, ByVal e As Object) _
Handles dw.Stopped
Dim sb As New System.Text.StringBuilder
With sb
.AppendLine("dw_Stopped")
.AppendLine("**********")
.AppendLine(String.Format("e:{1} (e Type:{2})",
e.ToString, e.GetType.Name))
End With
Debug.WriteLine(sb.ToString)
End Sub
Private Sub dw_EnumerationCompleted(ByVal sender As DeviceWatcher, ByVal e As Object) _
Handles dw.EnumerationCompleted
If e IsNot Nothing Then
Dim sb As New System.Text.StringBuilder
With sb
.AppendLine("EnumerationCompleted")
.AppendLine("********************")
.AppendLine(String.Format("e:{1} (e Type:{2})",
e.ToString, e.GetType.Name))
End With
Debug.WriteLine(sb.ToString)
End If
End Sub
End Class