Hallöchen,
ich habe da ein kleines Problemchen: Ich muss meinem Lehrer für die Schule ein kleines Programm erstellen, welches automatisch eine USB-Verbindung erkennt und wenn ein USB-Gerät wieder entfernt wird.
Dazu gehört ein USB-Stick, welches ich schon geschafft habe. Er möchte nur auch, dass es erkannt wird, wenn z.B. eine Tastatur, eine Maus oder sonstiges mit einer USB-Schnittstelle erkannt wird.
Bisheriger vollständiger Code:
Spoiler anzeigen
Danke schon mal im Voraus.
Grüße,
Michi
ich habe da ein kleines Problemchen: Ich muss meinem Lehrer für die Schule ein kleines Programm erstellen, welches automatisch eine USB-Verbindung erkennt und wenn ein USB-Gerät wieder entfernt wird.
Dazu gehört ein USB-Stick, welches ich schon geschafft habe. Er möchte nur auch, dass es erkannt wird, wenn z.B. eine Tastatur, eine Maus oder sonstiges mit einer USB-Schnittstelle erkannt wird.
Bisheriger vollständiger Code:
VB.NET-Quellcode
- Imports System.IO
- Public Class Form1
- Private allDrives As New List(Of DriveInfo)
- Private Const WM_DEVICECHANGE As Integer = &H219
- Private Const DBT_DEVICEARRIVAL As Integer = &H8000
- Private Const DBT_DEVICEREMOVECOMPLETE As Integer = &H8004
- Protected Overloads Overrides Sub WndProc(ByRef msg As Message)
- MyBase.WndProc(msg)
- If msg.Msg = WM_DEVICECHANGE AndAlso msg.WParam = DBT_DEVICEARRIVAL Then
- 'Laufwerke suchen
- For Each s As String In Directory.GetLogicalDrives
- find_driveinfo_arg = s
- Dim d As DriveInfo = allDrives.Find(AddressOf find_driveinfo)
- If d Is Nothing Then
- 'Laufwerk ist neu
- Console.Beep(1000, 1500)
- 'Laufwerk zu "bereits vorhanden" hinzufügen
- allDrives.Add(New DriveInfo(s))
- End If
- Next
- End If
- If msg.Msg = WM_DEVICECHANGE AndAlso msg.WParam = DBT_DEVICEREMOVECOMPLETE Then
- 'alle laufwerke aus der liste prüfen
- Dim temp As List(Of DriveInfo) = GetAllDrives()
- For Each d As DriveInfo In allDrives
- find_driveinfo_arg = d.Name
- Dim lost As DriveInfo = temp.Find(AddressOf find_driveinfo)
- If lost Is Nothing Then
- 'Laufwerk wird in der Liste nicht mehr gefunden
- Console.Beep(1000, 3000)
- MsgBox("Ein USB-Gerät wurde entfernt.", MsgBoxStyle.Information, "USB-Alert")
- 'Laufwerk aus der Liste löschen
- allDrives.Remove(d)
- Exit For
- End If
- Next
- End If
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Me.Hide()
- Timer1.Interval = 10
- Timer1.Start()
- Me.Hide()
- allDrives = GetAllDrives()
- End Sub
- Private Function GetAllDrives() As List(Of DriveInfo)
- Dim ret As New List(Of DriveInfo)
- For Each d As String In Directory.GetLogicalDrives
- ret.Add(New DriveInfo(d))
- Next
- Return ret
- End Function
- 'Suchfunktion für die Liste
- Private find_driveinfo_arg As String
- Private Function find_driveinfo(ByVal d As DriveInfo)
- If d.Name = find_driveinfo_arg Then
- Return True
- Else
- Return False
- End If
- End Function
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- Me.Hide()
- End Sub
- End Class
Danke schon mal im Voraus.
Grüße,
Michi