DVD Listener Klasse

    • C#
    • .NET (FX) 4.5–4.8

    Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Eddy.

      DVD Listener Klasse

      Hi Forum,

      hier mal eine kleine Klasse aus meinem aktuellen Projekt:

      Ihr benötigt eine Referenz auf

      Quellcode

      1. System.Managment
      :!: :!: :!:

      C#-Quellcode

      1. ​using System;
      2. using System.Collections.Generic;
      3. using System.Threading;
      4. using System.Linq;
      5. using System.IO;
      6. using System.Management;
      7. using System.Text;
      8. using System.Threading.Tasks;
      9. namespace Auto_DVD_Ripper
      10. {
      11. public class DVDListener
      12. {
      13. public class DVDArrivedArgs : EventArgs
      14. {
      15. public String VolumeName;
      16. public String DriveLetter;
      17. public Boolean IsVideoDVD;
      18. public DVDArrivedArgs(String volName, String driveLetter, Boolean videoDVD)
      19. {
      20. VolumeName = volName;
      21. DriveLetter = driveLetter;
      22. IsVideoDVD = videoDVD;
      23. }
      24. }
      25. public class StatusChangedArgs : EventArgs
      26. {
      27. public Boolean IsRunning;
      28. public StatusChangedArgs(Boolean running)
      29. {
      30. IsRunning = running;
      31. }
      32. }
      33. public event EventHandler<StatusChangedArgs> OnStatusChanged;
      34. public event EventHandler<DVDArrivedArgs> OnDVDArrived;
      35. public event EventHandler OnDVDEject;
      36. public Boolean IsRunning;
      37. private ManagementEventWatcher w;
      38. public DVDListener(Boolean StartDirectly = false)
      39. {
      40. IsRunning = false;
      41. if(StartDirectly)
      42. {
      43. this.Start();
      44. }
      45. }
      46. public void Start()
      47. {
      48. WqlEventQuery q;
      49. ManagementOperationObserver observer = new ManagementOperationObserver();
      50. ConnectionOptions opt = new ConnectionOptions();
      51. opt.EnablePrivileges = true;
      52. ManagementScope scope = new ManagementScope("root\\CIMV2", opt);
      53. q = new WqlEventQuery();
      54. q.EventClassName = "__InstanceModificationEvent";
      55. q.WithinInterval = new TimeSpan(0, 0, 1);
      56. q.Condition = @"TargetInstance ISA 'Win32_LogicalDisk' and
      57. TargetInstance.DriveType = 5";
      58. w = new ManagementEventWatcher(scope, q);
      59. w.EventArrived += new EventArrivedEventHandler(this.EventArrived);
      60. w.Start();
      61. IsRunning = true;
      62. raiseStatusChange(IsRunning);
      63. }
      64. public void Stop()
      65. {
      66. w.Stop();
      67. IsRunning = false;
      68. raiseStatusChange(IsRunning);
      69. }
      70. private void raiseStatusChange(Boolean status)
      71. {
      72. if (OnStatusChanged != null) OnStatusChanged(this, new StatusChangedArgs(status));
      73. }
      74. private void EventArrived(object sender, EventArrivedEventArgs e)
      75. {
      76. PropertyData pd = e.NewEvent.Properties["TargetInstance"];
      77. if (pd != null)
      78. {
      79. ManagementBaseObject mbo = pd.Value as ManagementBaseObject;
      80. if (mbo.Properties["VolumeName"].Value != null)
      81. {
      82. DVDArrivedArgs args = new DVDArrivedArgs(mbo.Properties["VolumeName"].Value.ToString(), mbo.Properties["Name"].Value.ToString(), isDVD(mbo.Properties["Name"].Value.ToString()));
      83. if (OnDVDArrived != null) OnDVDArrived(this, args);
      84. }
      85. else
      86. {
      87. if (OnDVDEject != null) OnDVDEject(this, new EventArgs());
      88. }
      89. }
      90. }
      91. private Boolean isDVD(String path)
      92. {
      93. string videoTS = Path.Combine(path, "VIDEO_TS");
      94. DirectoryInfo dir = new DirectoryInfo(videoTS);
      95. if (dir.Exists)
      96. {
      97. if (dir.GetFiles("*.vob").Count() > 0) return true;
      98. else return false;
      99. }
      100. else return false;
      101. }
      102. }
      103. }


      Viel Spaß damit 8o

      (Ein Link oder so wäre nett wenn ihr die Klasse verwendet :thumbsup: )
      Hmkay. :|
      Sehr nett, aber geht es auch mit anderen Datenträgern (CD,HD-DVD,BlueRay) je nach dem was für ein laufwerk das ist oder muss es umbedingt DVD sein?

      LG, J.Herbrich
      Ok dancke, dass wollte ich Wissen, aber vielen Danck für dieses überaus sehr nützliche Snipped. Sagt es ein auch was für ein Typ von Disk eingelegt wurde??

      LG, J.Herbrich
      Die Value des Type Dissoziators lautet:

      Quellcode

      1. ​array = {dvd;cd;blure-ray;hddvd;etc;}


      LG, J.Herbrich
      Ist das auch in VB.NET übersetzbar und welche Controls verwendet der zum anzeigen der DVDs?
      Auf irgendwas muss der DVD-Film angezeigt worden können sodass der Benutzer auch DVDs abspielen kann.

      Ich habe versucht mit dem Converter den Code zu übersetzen aber das geht nicht.
      @Thiemo1991 Es geht sehrwohl!

      VB.NET-Quellcode

      1. Imports System.Collections.Generic
      2. Imports System.Threading
      3. Imports System.Linq
      4. Imports System.IO
      5. Imports System.Management
      6. Imports System.Text
      7. Imports System.Threading.Tasks
      8. Namespace Auto_DVD_Ripper
      9. Public Class DVDListener
      10. Public Class DVDArrivedArgs
      11. Inherits EventArgs
      12. Public VolumeName As [String]
      13. Public DriveLetter As [String]
      14. Public IsVideoDVD As [Boolean]
      15. Public Sub New(volName As [String], driveLetter__1 As [String], videoDVD As [Boolean])
      16. VolumeName = volName
      17. DriveLetter = driveLetter__1
      18. IsVideoDVD = videoDVD
      19. End Sub
      20. End Class
      21. Public Class StatusChangedArgs
      22. Inherits EventArgs
      23. Public IsRunning As [Boolean]
      24. Public Sub New(running As [Boolean])
      25. IsRunning = running
      26. End Sub
      27. End Class
      28. Public Event OnStatusChanged As EventHandler(Of StatusChangedArgs)
      29. Public Event OnDVDArrived As EventHandler(Of DVDArrivedArgs)
      30. Public Event OnDVDEject As EventHandler
      31. Public IsRunning As [Boolean]
      32. Private w As ManagementEventWatcher
      33. Public Sub New(Optional StartDirectly As [Boolean] = False)
      34. IsRunning = False
      35. If StartDirectly Then
      36. Me.Start()
      37. End If
      38. End Sub
      39. Public Sub Start()
      40. Dim q As WqlEventQuery
      41. Dim observer As New ManagementOperationObserver()
      42. Dim opt As New ConnectionOptions()
      43. opt.EnablePrivileges = True
      44. Dim scope As New ManagementScope("root\CIMV2", opt)
      45. q = New WqlEventQuery()
      46. q.EventClassName = "__InstanceModificationEvent"
      47. q.WithinInterval = New TimeSpan(0, 0, 1)
      48. q.Condition = "TargetInstance ISA 'Win32_LogicalDisk' and" & vbCr & vbLf & " TargetInstance.DriveType = 5"
      49. w = New ManagementEventWatcher(scope, q)
      50. w.EventArrived += New EventArrivedEventHandler(AddressOf Me.EventArrived)
      51. w.Start()
      52. IsRunning = True
      53. raiseStatusChange(IsRunning)
      54. End Sub
      55. Public Sub [Stop]()
      56. w.[Stop]()
      57. IsRunning = False
      58. raiseStatusChange(IsRunning)
      59. End Sub
      60. Private Sub raiseStatusChange(status As [Boolean])
      61. RaiseEvent OnStatusChanged(Me, New StatusChangedArgs(status))
      62. End Sub
      63. Private Sub EventArrived(sender As Object, e As EventArrivedEventArgs)
      64. Dim pd As PropertyData = e.NewEvent.Properties("TargetInstance")
      65. If pd IsNot Nothing Then
      66. Dim mbo As ManagementBaseObject = TryCast(pd.Value, ManagementBaseObject)
      67. If mbo.Properties("VolumeName").Value IsNot Nothing Then
      68. Dim args As New DVDArrivedArgs(mbo.Properties("VolumeName").Value.ToString(), mbo.Properties("Name").Value.ToString(), isDVD(mbo.Properties("Name").Value.ToString()))
      69. RaiseEvent OnDVDArrived(Me, args)
      70. Else
      71. RaiseEvent OnDVDEject(Me, New EventArgs())
      72. End If
      73. End If
      74. End Sub
      75. Private Function isDVD(path__1 As [String]) As [Boolean]
      76. Dim videoTS As String = Path.Combine(path__1, "VIDEO_TS")
      77. Dim dir As New DirectoryInfo(videoTS)
      78. If dir.Exists Then
      79. If dir.GetFiles("*.vob").Count() > 0 Then
      80. Return True
      81. Else
      82. Return False
      83. End If
      84. Else
      85. Return False
      86. End If
      87. End Function
      88. End Class
      89. End Namespace
      90. '=======================================================
      91. 'Service provided by Telerik (www.telerik.com)
      92. 'Conversion powered by NRefactory.
      93. 'Twitter: @telerik
      94. 'Facebook: facebook.com/telerik
      95. '=======================================================

      Thiemo1991 schrieb:

      sodass der Benutzer auch DVDs abspielen kann.


      Diese Klasse feuert nur Events wenn eine DVD eingelegt wird bzw. entfernt wird oder sich ein Status aendert. Zum abspielen ist diese Klasse nicht gedacht. Nur fuer diese Events. Wenn das Event OnDVDArrived gefeurt wird hast du in den DVDArrivedArgs ein paar Informationen, String VolumeName; String DriveLetter; und Boolean IsVideoDVD;

      Wie du diese Infos dann anzeigst bleibt dir ueberlassen, da hast du die Qual der Wahl, ListViews, TreeViews, DataGridView, Labels etc....... Zum abspielen kannste glaube ich das WMP-Plugin oder das VLC-Plugin nehmen, oder wie wir beide das schon mal hatten mit der Bass_DSHOW, aber da hast du das mit dem DVD-Laden und DVD-Menues klickbar machen nicht hinbekommen. Obwohl es da nicht viel zu machen gibt und es dir beschrieben wurde.
      And i think to myself... what a wonderfuL World!
      Wärst du so nett und würdest daraus ein Beispielprojekt machen sodass ich - und auch andere - sehen was man machen muss?
      Nein das mach ich nicht. Du hast schon soweit C&P fertigen Code, mehr als eine Anleitung ist meinerseits nicht drin, auch wenn ich glaube das es vergebliche Muehe ist.(waere nett wenn ihr ihm das selbst machen lasst und nicht vorkaut, sonst lernt er es nie)

      Mach einen Verweis auf System.Management, pack die Klasse in dein Projekt, in deiner Form-Klasse brauchst du ein wenig Code. Allerdings sind die Events im Beispielcode nicht abboniert, da musst du jetzt herausfinden wie das geht. Noch dazu sind in der DVDListener-Klasse 2 Methoden, welche unbedingt gecalled werden muessen, Start und Stop. Fuer start und stop empfehle ich das Form.Shown und das Form.FormClosing Event. Um Events zu abbonieren recherchiere ein wenig, suche speziell nach AddHandler oder WithEvents.

      VB.NET-Quellcode

      1. Private DVD as new DVDListener
      2. Private Sub dvd_OnDVDArrived(sender As Object, e As DVDListener.DVDArrivedArgs)
      3. End Sub
      4. Private Sub dvd_OnDVDEject(sender As Object, e As EventArgs)
      5. End Sub
      6. Private Sub dvd_OnStatusChanged(sender As Object, e As DVDListener.StatusChangedArgs)
      7. End Sub

      And i think to myself... what a wonderfuL World!

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

      Ich glaube schon das er es versucht hat, aber haeppchenweise. Versuch mal nur diesen Auszug uebersetzen zu lassen. ;)
      Spoiler anzeigen

      C#-Quellcode

      1. public class DVDListener
      2. {
      3. public class DVDArrivedArgs : EventArgs
      4. {
      5. public String VolumeName;
      6. public String DriveLetter;
      7. public Boolean IsVideoDVD;
      8. public DVDArrivedArgs(String volName, String driveLetter, Boolean videoDVD)
      9. {
      10. VolumeName = volName;
      11. DriveLetter = driveLetter;
      12. IsVideoDVD = videoDVD;
      13. }
      14. }


      telerik error output schrieb:


      CONVERSION ERROR: Code could not be converted. Details:

      -- line 14 col 10: "}" expected

      Please check for any errors in the original code and try again.




      Edit @Thiemo1991
      Falls du den Namespace Auto_DVD_Ripper drin gelassen hast, importiere diesen auch in der Form-Klasse.

      And i think to myself... what a wonderfuL World!

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