Beliebiges CDRom-Laufwerk öffnen und schließen

    • VB.NET

    Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VincentTB.

      Beliebiges CDRom-Laufwerk öffnen und schließen

      Nachdem es so viele Beispiele gibt, die nicht mehr aktuell sind oder böse Funktionen benutzen, oder einfach überhaupt nicht funktionieren, hab' ich mir erlaubt das kleine folgende Programm zusammen zu schrauben. Es zeigt nach Knopfdruck vorhandene CD/DVD-Laufwerke in einer Listbox an und öffnet/schließt die Lade, deren Laufwerksbuchstabe in einer Textbox angegeben ist.
      Der Code läuft einwandfrei auf meinem Computer. Und er sollte absolut politisch korrekt ausgefallen sein.
      Irgendwelche Anmerkungen dazu?




      Spoiler anzeigen

      VB.NET-Quellcode

      1. 'Namespace Microsoft.VisualBasic abgeschaltet
      2. ' Option Explicit = on
      3. ' Option Strict = on'
      4. 'Option Infer = on
      5. ' Erforderlich Form 1 mit 4 Buttons, 1 Listbox, 1 Textbox
      6. Public Class Form1
      7. 'DLLImport für Aktion Lade auf/zu
      8. ' Dllimport von winmm.dll: Im Original ist bei 'buffer' ein Stringbuilder vorgesehen (pinvoke.net)
      9. <System.Runtime.InteropServices.DllImport("winmm.dll")> _
      10. Private Shared Function mciSendString(ByVal command As String, ByVal buffer As String, ByVal bufferSize As Integer, ByVal hwndCallback As IntPtr) As Integer
      11. End Function
      12. 'Schalter CD/DVD/BluRay-Laufwerke in Listbox auflisten
      13. Private Sub btnlist_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnlist.Click
      14. For Each Drive As IO.DriveInfo In IO.DriveInfo.GetDrives
      15. If Drive.DriveType = IO.DriveType.CDRom Then
      16. If Drive.IsReady Then
      17. ListBox1.Items.Add(Drive.Name & " [" & Drive.VolumeLabel & "]")
      18. Else
      19. ListBox1.Items.Add(Drive.Name & " [Kein Medium/nicht bereit]")
      20. End If
      21. End If
      22. Next
      23. End Sub
      24. ' Schalter Öffnen
      25. Private Sub BtnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnopen.Click
      26. If TextBox1.Text.Length > 0 Then
      27. Open_Tray(TextBox1.Text.Substring(0, 1), True)
      28. Else
      29. TextBox1.Text = "Kein Laufwerk gewählt"
      30. End If
      31. End Sub
      32. 'Schalter Schliessen
      33. Private Sub BtnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnclose.Click
      34. If TextBox1.Text.Length > 0 Then
      35. Open_Tray(TextBox1.Text.Substring(0, 1), False)
      36. Else
      37. TextBox1.Text = "Kein Laufwerk gewählt"
      38. End If
      39. End Sub
      40. 'Aktion Lade auf/zu
      41. Private Sub Open_Tray(ByVal Letter As String, ByVal Open As Boolean)
      42. Dim Drive As String = Letter.Substring(0, 1)
      43. Dim Action As String = String.Empty
      44. If Open Then ' Hier Select entfernt und If verwendet
      45. Action = " Door Open"
      46. Else
      47. Action = " Door Closed"
      48. End If
      49. 'Im Original ist in den folgenden
      50. mciSendString(String.Concat("Open ", Drive, ": Alias ", "Laufwerk", Drive, " Type CDAudio"), String.Empty, 0, IntPtr.Zero)
      51. mciSendString(String.Concat("Set ", "Laufwerk", Drive, Action), String.Empty, 0, IntPtr.Zero)
      52. End Sub
      53. 'Schalter beenden
      54. Private Sub btnende_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnende.Click
      55. Me.Close()
      56. End Sub
      57. End Class
      Bilder
      • CDSpielerei.png

        15,93 kB, 308×190, 190 mal angesehen
      Das Leben ist nicht so kompliziert. Eine süsse Erinnerung tut's.
      Indiana Jocutus - Jäger des Variablen-Schatzes

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jocutus“ () aus folgendem Grund: Quellcode editiert - (wie von VincentTB erwähnt)

      Wahrscheinlich braucht man es nicht wirklich.
      Ich habe einen Computer unter einem Tisch stehen.
      Eine etwas erweiterte Fassung habe ich im Tray laufen. F7 öffnet oder schließt das Laufwerk - so spare ich mir
      die Popelei mit dem Schalter unter der Schublade.
      Das Leben ist nicht so kompliziert. Eine süsse Erinnerung tut's.
      Indiana Jocutus - Jäger des Variablen-Schatzes

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jocutus“ ()

      Ohne das Programm selbst zu bewerten. Warum sollte man denn nicht die windowsinterne Funktion nutzen?
      Bilder
      • Unbenannt.png

        13,56 kB, 574×309, 177 mal angesehen

      Mangafreak1995 schrieb:

      Warum sollte man denn nicht die windowsinterne Funktion nutzen?


      Niemand hat behauptet, es spricht etwas gegen die Windows-Funktion. 8-) Schonmal versucht, das Laufwerk mit der Funktion auch wieder zu schliessen? :thumbsup:

      Im Übrigen war der hauptsächliche Grund für diesen Thread, daß viele Anleitungen nicht richtig funktioniert haben oder mit 'bösem Code' verseucht waren... ^^
      Das Leben ist nicht so kompliziert. Eine süsse Erinnerung tut's.
      Indiana Jocutus - Jäger des Variablen-Schatzes
      Wenn du schon die CD/DVD/Ray einlegst kannst du auch gleich gegen die Lade drücken. Die gehen doch dann alle automatisch zu. Ich fände es sinnvoll, wenn du es ohne Fenster machen würdest. Wie das Laufwerk entfernen von Windows im Tray oder im Kontextmenu ein Schließen-Eintrag hinzufügen.