Datenträger-ID auslesen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ramon1611.

    Datenträger-ID auslesen

    Hallo,
    ich habe vor die Datenträger-ID der Festplatte auszulesen, ich habe es mit folgenden code versucht:

    VB.NET-Quellcode

    1. Dim c As New ManagementClass("Win32_DiskDrive")
    2. Dim o As ManagementObject
    3. For Each o In c.GetInstances
    4. MsgBox(o("Signature"))
    5. Next o

    Doch mir wird immer nur eine leere MsgBox angezeigt

    kann mir vllt. irgendjemand weiterhelfen?!
    Funktioniert es evtl. hiermit? vbarchiv.net/tipps/tipp_1499-f…ummer-auslesen-vbnet.html

    Wobei es natürlich eigentlich das gleiche sein müsste.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Wenn es Dir um die Seriennummer geht ist SELECT * FROM Win32_PhysicalMedia erfolgreich, das Model steht in SELECT * FROM Win32_DiskDrive
    "Beispiel Code"

    VB.NET-Quellcode

    1. Dim ddSearcher As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
    2. Dim pmSearcher As New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
    3. For Each mo As ManagementObject In ddSearcher.Get
    4. Dim sn = mo("SerialNumber") : If sn IsNot Nothing Then Debug.Print("SN: {0,-10}", sn)
    5. Dim model = mo("Model") : If model IsNot Nothing Then Debug.Print("Model: {0,-10}", model)
    6. Next
    7. For Each mo As ManagementObject In pmSearcher.Get
    8. Dim sn = mo("SerialNumber") : If sn IsNot Nothing Then Debug.Print("SN: {0,-10}", sn)
    9. Dim model = mo("Model") : If model IsNot Nothing Then Debug.Print("Model: {0,-10}", model)
    10. Next


    Statt WMI kann man auch direkt über die Windows API's gehen:DeviceIoControl
    also das mit dem Win32_PhysicalMedia brauche ich nicht
    ich brauche wirklich die Datenträger-ID, wie man sie z.B. mit diskpart auslesen kann, nur eben brauch ich das ganze in meinen programm, ohne dass der benutzer irgendetwas davon sieht

    @Kangaroo
    wenn du mir sagen könntest wie ich das ganze in VB mache, gerne :D

    @thefiloe
    um ehlich zu sein: ich versteh nicht wirklich viel, von dem was da steht^^
    Hallo Ramon ich wäre mall so nett dir einen Kompletten fertigen Source code zu geben

    du musst aber 1 Verweiß hinzufügen System.Management

    und dann diese 3 Importieren
    Imports:

    VB.NET-Quellcode

    1. Imports System.Management
    2. Imports System.Runtime.CompilerServices
    3. Imports System.Management.PropertyDataCollection


    Source:

    VB.NET-Quellcode

    1. Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_diskdrive where interfacetype = 'USB'")
    2. Dim obj2 As ManagementObject
    3. For Each obj2 In searcher.Get
    4. Dim enumerator As PropertyDataEnumerator = obj2.Properties.GetEnumerator
    5. Do While enumerator.MoveNext
    6. Dim current As PropertyData = enumerator.Current
    7. If (Not current.Value Is Nothing) Then
    8. Dim str As String = Convert.ToString(RuntimeHelpers.GetObjectValue(current.Value))
    9. If (current.Name = "PNPDeviceID") Then
    10. Interaction.MsgBox(("Eindeutige ID des Sticks ist: " & str), MsgBoxStyle.ApplicationModal, Nothing)
    11. Me.Hide()
    12. Return
    13. End If
    14. End If
    15. Loop
    16. Next
    17. Interaction.MsgBox("Kein Stick angeschlossen", MsgBoxStyle.ApplicationModal, Nothing)


    wenn hilfreich dann drück Button :)
    Das ist WinAPI. Das ist eine Funktion welche Windows zur Verfügung stellt auf welche du via Pinvoke zugreifen kannst(alternativ wie gesagt). Aber allgemein greift VB dauernd auf solche Funktionen zu wie z.B. wenn eine Datei gelesen wird(natürlich eine andere). Um das auf der Seite lesen zu können braucht man jedoch minimale C Kenntnisse.
    Wer dies nicht hab kann die Deklaration auch im Internet suchen und findet diese auch meistens:
    pinvoke.net/default.aspx/kernel32.getvolumeinformation

    Wobei WIM in dem Fall sicher einfacher ist. Wollte nur eine Alternative aufzeigen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    okay
    danke, aber 2 was:

    1. warum usb, ich brauch das für ne richtige festplatte, und zwar nicht für irgend eine, sondern für die, auf der winows installiert ist
    hab ich schon erledigt:

    SQL-Abfrage

    1. SELECT * FROM Win32_DiskDrive where index=0


    2. ich brauche wirklich die Datenträger-ID
    also die die bei diskpart steht (siehe bild)

    und um gleich nochwas anzuschneiden:
    ich muss später noch das offset der systempartition iw auslesen :S


    @thefiloe
    okay
    minimale C kenntnisse sollte ich doch eigentlich durch PHP haben, aba iw verstehe ich das ne so wirklich
    is aba auch egal, ich bleib erstmal bei dem jetzt, damit ichs verstehe und das kann ich mir ja später immer nochmal anschauen
    Bilder
    • screenshot005.png

      16,19 kB, 641×301, 291 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ramon1611“ ()

    weder noch, hab mich verschrieben, das "Brauche" sollte hinter das "ich" :D

    also ich bekomme nicht genau das, was ich eigentlich haben wollte

    bei mir wird folgendes angezeigt:

    Quellcode

    1. Eindeutige ID des Sticks ist: IDE\DISKWDC_WD10EALX-009BA0_____________________15.01H15\4&15828421&0&0.0.0

    aber ich brauche das, was ich oben im bild markiert habe
    Soo entschuldigung. Ich habe dir die falsche WinAPI gepostet(du willst was anderes... nur irgendwo stand Serial und da ist die SerialNumber). Naja: ist das hier die erwünschte Lösung:

    EDIT: Schon wieder falsch... Langsam echt durcheinander... warte mal.
    EDIT2: Was soll die Datenträger ID bitte sein?
    EDIT3: Habs gefunden. Stimmt mit meiner Diskpart überein: stackoverflow.com/questions/98…sks-identifier-on-windows. Hab zwar nach wie vor keinen Plan was die DiskID ist aber jo.
    Da ich dich nicht den ganzen Code übersetzen lassen möchte mach ichs kurz. Du musst die Signature Eigenschaft verwenden:
    Also passt du den Code von oben an(über die Qualität lässt sich stark streiten):

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_diskdrive")
    2. Dim obj As ManagementObject
    3. For Each obj In searcher.Get
    4. Dim enumerator As PropertyDataEnumerator = obj.Properties.GetEnumerator
    5. Do While enumerator.MoveNext
    6. Dim current As PropertyData = enumerator.Current
    7. If (Not current.Value Is Nothing) Then
    8. If (current.Name = "Signature") Then
    9. Dim str As String = Convert.ToString(RuntimeHelpers.GetObjectValue(current.Value))
    10. Return str 'hier haste dann die id
    11. End If
    12. End If
    13. Loop
    14. Next


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „thefiloe“ ()

    frag mich nicht, was das genau darstellen soll, ich wess nur, wie man die mit diskpart ausliest und wie die bei mir aussieht (siehe bild)

    EDIT: okay, so weit so gut, aber ich versteh nicht, warum das bei mir iw ne gehn will
    wenn ichs in ne label schreiben will, passiert nix, wenn ichs in ner MsgBox ausgeben lassen will, wird mir keine angezeigt
    ich versteh das nicht
    EDIT2: außerdem verstehe ich aba iw auch nicht, warum bei mir bei der Datenträger-ID sone komische IS in den geschweiften klammern steht
    bei allen bildern was ich dazu im inet und in ner zeitschrift gefunden hab steht sowas wie "6818D7CC"

    ich frag ma meinen kumpel, vllt. klappts ja bei dem

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ramon1611“ ()