[VB.net]USB-Stick etc Erkennung

08/31/2013 17:09 DeinMud#1
Hey, da ich kein Tutorial gefunden habe, wie man USB-Sticks u.ä. die an den PC gesteckt werden erkennt, wollte ich mal ein kleines Tutorial dazu schreiben.

Ich mache das Beispiel jetzt, wie ihr die Serialnummer eines USB-Sticks rausfindet.

Dann fangen wir mal an:

Wir erstellen uns eine WinForm Anwendung.

Als erstes setzt ihr dann einen Verweis auf;

System.Management (befindet sich unter .NET bei Verweise)

Anschliessend gebt ihr oben als erstes halt ein:

Code:
Imports System.Management
Nun erstellen wir eine neue Klasse,
Die Prozedur wird dort später eingetragen, damit bei einer neuen Instanz von "USBFinder", die Prozedur die die Seriennummer findet, ausgelöst wird und Wir nicht extra noch die Prozedur auslösen und den Wert abfragen müssen.

Code:
Public Class USBFinder
    Public Sub New()

    End Sub
Anschliessend erstellen wir eine Variable worin sich die Seriennummer befinden wird und dazu noch eine Readonly Property - da wir die Variable klassenübergreifend verwenden möchten.

Code:
    Private Serialnumber_ As String
    Public ReadOnly Property Serialnumber As String
        Get
            Return Serialnumber_
        End Get
    End Property
Nun gehts um die Prozedur, wo wir die Seriennummer rausfinden. Diese ist eigentlich nicht besonders lang:

Code:
    Private Sub FindSerialnumb()
        Try
            Dim Objsrch As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'")
            For Each WMIObject As ManagementObject In Objsrch.Get
                Serialnumber_ = WMIObject("Serialnumber").ToString
            Next
        Catch ex As ManagementException
            Return
        End Try
    End Sub
Das "Serialnumber" steht, wie schon viele vermutet hätten, für die Seriennummer. Das Try-catch wird benötigt, da falls kein Objekt gefunden (Kein Stick) wird eine Managementobjectexception geworfen wird, die wir mit deren Hilfe auffangen. Eine Auflistung welche Attribute man damit noch finden kann gibt es in der MSDN:
[Only registered and activated users can see links. Click Here To Register...]

Da wir jetzt die Prozedur zum herausfinden der Seriennummer haben, müssen wir nurnoch hier die Prozedur eintragen:

Code:
    Public Sub New()
        Me.FindSerialnumb()
    End Sub
und nun brauchen wir nur noch eine neue Instanz von "USBFinder" zu erstellen und die Seriennummer abzurufen.

Code:
Public Class BasisClass
    Private test As New USBFinder
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        MessageBox.Show(test.Serialnumber)
    End Sub
End Class
Der ganze Code sieht dann so aus:

Code:
Imports System.Management
Public Class BasisClass
    Private test As New USBFinder
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        MessageBox.Show(test.Serialnumber)
    End Sub
End Class
Public Class USBFinder
    Public Sub New()
        Me.FindSerialnumb()
    End Sub
    Private Serialnumber_ As String
    Public ReadOnly Property Serialnumber As String
        Get
            Return Serialnumber_
        End Get
    End Property
    Private Sub FindSerialnumb()
        Try
            Dim Objsrch As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'")
            For Each WMIObject As ManagementObject In Objsrch.Get
                Serialnumber_ = WMIObject("Serialnumber").ToString
            Next
        Catch ex As ManagementException
            Return
        End Try
    End Sub
End Class
Auch wenn das kein großes Tutorial war, hats hoffentlich manchen geholfen.
10/08/2013 21:49 davydavekk#2
That's interesting, and it's well explained !

Thanks for sharing