vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: USB-Stick Seriennummer auslesen 
Autor: MikeJ
Datum: 17.06.11 13:32

    Inherits System.Windows.Forms.NativeWindow
 
    ' Das sind die Ereignisse aus WParam.
    ' Uns interessiert nur, ob ein Laufwerk hinzugekommen ist oder 
    '  entfernt wurde.
    Public Event DriveArrived(ByVal sender As Object, ByVal e As _
      System.IO.DriveInfo)
    Public Event DriveRemoved(ByVal sender As Object, ByVal e As _
    System.IO.DriveInfo)
 
    ' Die Struktur für OEM.
    ' Wird über LParam gefüllt.
    ' USB-Sticks laufen alle hier auf.
    Private Structure DEV_BROADCAST_OEM
        Dim dbco_size As Integer
        Dim dbco_devicetype As Integer
        Dim dbco_reserved As Integer
        Dim dbco_identifier As Integer
        Dim dbco_suppfunc As Integer
    End Structure
 
    ' Die Struktur für Volumes.
    ' Wird über LParam gefüllt.
    Private Structure DEV_BROADCAST_VOLUME
        Dim dbch_size As Integer
        Dim dbch_devicetype As Integer
        Dim dbch_reserved As Integer
        Dim dbcv_unitmask As Integer
        Dim dbcv_flags As Short
    End Structure
 
    ' Die Struktur für den Header.
    ' Wird über LParam gefüllt.
    Private Structure DEV_BROADCAST_HDR
        Dim dbch_size As Integer
        Dim dbch_devicetype As Integer
        Dim dbch_reserved As Integer
    End Structure
 
    ' Das sind die Konstanten der Gerätetypen
    ' Vorsicht die Gerätetypen Variablen in den Strukturen sind vom Typ Integer.
    ' IntelliSense kann das nicht auflösen.
    Private Enum DeviceType
        OEM = 0
        DEVNODE = 1
        VOLUME = 2
        PORT = 3
        NET = 4
        DEVICEINTERFACE = 5
        HANDLE = 6
    End Enum
 
 
 
    ' Windowmessage DeviceChange
    Private Const WM_DEVICECHANGE As Integer = &H219
 
    'Die beiden Ereignisse, die für uns von Bedeutung sind.
    Private Const DBT_DEVICEARRIVAL As Integer = &H8000
    Private Const DBT_DEVICEREMOVECOMPLETE As Integer = &H8004
 
    ' Dies ist der Dreh- und Angelpunkt der Klasse. - Hier bekommen wir die 
    '  Messages mit.
    ' In unserm Fall interessiert uns nur die WM_DeviceChange-Nachricht
    Protected Overrides Sub WndProc(ByRef m As Message)
        If m.Msg = WM_DEVICECHANGE Then
            Debug.WriteLine(GetSerialNumber(Me.HandleHeader(m)))
        End If
        MyBase.WndProc(m)
    End Sub
 
    ' Hier schauen wir erst mal in den Header und verzweigen dementsprechend
    Private Function HandleHeader(ByRef m As Message) As String
        Dim header As DEV_BROADCAST_HDR
        Dim objHeader As Object = m.GetLParam(header.GetType)
        If Not IsNothing(objHeader) Then
            'Dient nur zur Kennzeichnung, was nicht implementiert ist
            Dim notSupported As Boolean
 
            Select Case header.dbch_devicetype
                Case DeviceType.OEM
                    Return Me.HandleOEM(m).Name
 
                Case DeviceType.DEVNODE
                    notSupported = True
 
                Case DeviceType.VOLUME
                    Return Me.HandleVolume(m).Name
 
                Case DeviceType.PORT
                    notSupported = True
 
                Case DeviceType.NET
                    notSupported = True
 
                Case DeviceType.DEVICEINTERFACE
                    notSupported = True
 
                Case DeviceType.HANDLE
                    notSupported = True
            End Select
        End If
    End Function
 
    Private ActDrive As IO.DriveInfo
    Private bArived As Boolean
    Private bRemoved As Boolean
 
    ' Das Ereignis betrifft ein Volume
    Private Function HandleVolume(ByRef m As Message) As IO.DriveInfo
        Dim volume As DEV_BROADCAST_VOLUME
        Dim objVolume As Object = m.GetLParam(volume.GetType)
 
        If Not IsNothing(objVolume) Then
            volume = DirectCast(objVolume, DEV_BROADCAST_VOLUME)
            Dim di As New IO.DriveInfo(Me.DriveFromMask(volume.dbcv_unitmask))
 
            ' USB-Stick
            StickID = volume.dbch_devicetype
            If di.DriveType = IO.DriveType.Removable Then
                If CInt(m.WParam) = DBT_DEVICEARRIVAL Then
                    'RaiseEvent DriveArrived(Me, di)
                    Return di
 
                    'Debug.WriteLine(GetHDDSerial(StickID))
                End If
            End If
 
            ' USB-Festplatte
            If di.DriveType = IO.DriveType.Fixed Then
                If CInt(m.WParam) = DBT_DEVICEARRIVAL Then
                    'RaiseEvent DriveArrived(Me, di)
                    Return di
                End If
            End If
 
            If CInt(m.WParam) = DBT_DEVICEREMOVECOMPLETE Then
                'RaiseEvent DriveRemoved(Me, di)
                Return di
            End If
        End If
        Return Nothing
    End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
USB-Stick Seriennummer auslesen10.022MikeJ13.01.11 21:55
Re: USB-Stick Seriennummer auslesen6.231MikeJ02.02.11 09:25
Re: USB-Stick Seriennummer auslesen6.352Manfred X02.02.11 09:43
Re: USB-Stick Seriennummer auslesen6.780MikeJ09.02.11 22:12
Re: USB-Stick Seriennummer auslesen6.524MikeJ17.06.11 11:28
Re: USB-Stick Seriennummer auslesen6.049ModeratorDaveS17.06.11 11:49
Re: USB-Stick Seriennummer auslesen5.976MikeJ17.06.11 13:29
Re: USB-Stick Seriennummer auslesen6.308MikeJ17.06.11 13:32
Re: USB-Stick Seriennummer auslesen5.827MikeJ17.06.11 13:32

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel