Erkennen, wann ein Laufwerk hinzugefügt bzw. entfernt wurde (USB-Stick)

    • VB.NET

    Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von lupo76.

      @lupo76 Da musst Du mal gezielt nach den richtigen Windows-Messages (WM_-Parametern) suchen.
      Frag Frau Google nach csharp wndproc sd card und Dir wird geholfen. Gugst Du hier.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      Ich habe hier noch einen WMI-Vorschlag. Sieht auf den ersten Blick unübersichtlich aus, ist aber genau so wirksam.

      Win32_DiskDrive class
      Win32_PhysicalMedia class
      Win32_LogicalDiskToPartition class
      Win32_DiskDriveToDiskPartition class


      VB.NET-Quellcode

      1. Option Strict On
      2. Option Explicit On
      3. Imports System.Text
      4. Imports System.Management
      5. Public Module Module1
      6. Public Sub Main()
      7. GetAllExternalPhysicalDisk()
      8. Console.ReadKey()
      9. End Sub
      10. Private Sub GetAllExternalPhysicalDisk()
      11. 'Alle Properties die benötigt werden definieren
      12. Dim propName() As String = "DeviceID SerialNumber Name".Split
      13. 'Vier Queries bereitstellen, wobei der Erste für die USB's schon definiert werden kann
      14. 'Dim query() As String = {"SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB')", "", "", ""}
      15. 'Oder über das MediaType Property, wobei auch hier der erste Query schon definiert wird
      16. Dim query() As String = {"SELECT * FROM Win32_DiskDrive WHERE MediaType='Removable Media' OR MediaType='External hard disk media'", "", "", ""}
      17. 'In der Schleife werden die restlichen Queries fortzu neu definiert und gleich in die Instanzierung einbezogen
      18. '1. Filtern aller externen Laufwerke
      19. For Each drive As ManagementObject In New ManagementObjectSearcher(query(0)).Get
      20. '2.Filtern der zugehörigen DiskPartition
      21. query(1) = String.Format("ASSOCIATORS OF {0}Win32_DiskDrive.DeviceID='{2}'{1} WHERE AssocClass = Win32_DiskDriveToDiskPartition", "{", "}", drive(propName(0)).ToString)
      22. For Each partition As ManagementObject In New ManagementObjectSearcher(query(1)).Get
      23. 'DiskPartition ausgeben
      24. Console.WriteLine("Partition ={0}{1}", vbTab, partition(propName(2)).ToString)
      25. '3. Den dazugehörigen Laufwerkbuchstaben ermitteln
      26. query(2) = String.Format("ASSOCIATORS OF {0}Win32_DiskPartition.DeviceID='{2}'{1} WHERE AssocClass = Win32_LogicalDiskToPartition", "{", "}", partition(propName(0)).ToString)
      27. For Each disk As ManagementObject In New ManagementObjectSearcher(query(2)).Get
      28. 'Laufwerkbuchstaben ausgeben
      29. Console.WriteLine("Disk ={0}{0}{1}\", vbTab, disk(propName(2)).ToString)
      30. Next
      31. Next
      32. '4. Die dazugehörige Seriennummer ermitteln
      33. query(3) = String.Format("Win32_PhysicalMedia.Tag='{0}'", drive(propName(0)).ToString)
      34. 'Seriennummer sofern vorhanden ausgeben
      35. Console.WriteLine("Serial ={0}{2}{1}{1}", vbTab, vbCrLf, (New ManagementObject(query(3))).Properties(propName(1)).Value.ToString)
      36. Next
      37. End Sub
      38. End Module


      Freundliche Grüsse

      exc-jdbi

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()