Hi Forum,
hier mal eine kleine Klasse aus meinem aktuellen Projekt:
Ihr benötigt eine Referenz auf
Viel Spaß damit
(Ein Link oder so wäre nett wenn ihr die Klasse verwendet )
hier mal eine kleine Klasse aus meinem aktuellen Projekt:
Ihr benötigt eine Referenz auf
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.Threading;
- using System.Linq;
- using System.IO;
- using System.Management;
- using System.Text;
- using System.Threading.Tasks;
- namespace Auto_DVD_Ripper
- {
- public class DVDListener
- {
- public class DVDArrivedArgs : EventArgs
- {
- public String VolumeName;
- public String DriveLetter;
- public Boolean IsVideoDVD;
- public DVDArrivedArgs(String volName, String driveLetter, Boolean videoDVD)
- {
- VolumeName = volName;
- DriveLetter = driveLetter;
- IsVideoDVD = videoDVD;
- }
- }
- public class StatusChangedArgs : EventArgs
- {
- public Boolean IsRunning;
- public StatusChangedArgs(Boolean running)
- {
- IsRunning = running;
- }
- }
- public event EventHandler<StatusChangedArgs> OnStatusChanged;
- public event EventHandler<DVDArrivedArgs> OnDVDArrived;
- public event EventHandler OnDVDEject;
- public Boolean IsRunning;
- private ManagementEventWatcher w;
- public DVDListener(Boolean StartDirectly = false)
- {
- IsRunning = false;
- if(StartDirectly)
- {
- this.Start();
- }
- }
- public void Start()
- {
- WqlEventQuery q;
- ManagementOperationObserver observer = new ManagementOperationObserver();
- ConnectionOptions opt = new ConnectionOptions();
- opt.EnablePrivileges = true;
- ManagementScope scope = new ManagementScope("root\\CIMV2", opt);
- q = new WqlEventQuery();
- q.EventClassName = "__InstanceModificationEvent";
- q.WithinInterval = new TimeSpan(0, 0, 1);
- q.Condition = @"TargetInstance ISA 'Win32_LogicalDisk' and
- TargetInstance.DriveType = 5";
- w = new ManagementEventWatcher(scope, q);
- w.EventArrived += new EventArrivedEventHandler(this.EventArrived);
- w.Start();
- IsRunning = true;
- raiseStatusChange(IsRunning);
- }
- public void Stop()
- {
- w.Stop();
- IsRunning = false;
- raiseStatusChange(IsRunning);
- }
- private void raiseStatusChange(Boolean status)
- {
- if (OnStatusChanged != null) OnStatusChanged(this, new StatusChangedArgs(status));
- }
- private void EventArrived(object sender, EventArrivedEventArgs e)
- {
- PropertyData pd = e.NewEvent.Properties["TargetInstance"];
- if (pd != null)
- {
- ManagementBaseObject mbo = pd.Value as ManagementBaseObject;
- if (mbo.Properties["VolumeName"].Value != null)
- {
- DVDArrivedArgs args = new DVDArrivedArgs(mbo.Properties["VolumeName"].Value.ToString(), mbo.Properties["Name"].Value.ToString(), isDVD(mbo.Properties["Name"].Value.ToString()));
- if (OnDVDArrived != null) OnDVDArrived(this, args);
- }
- else
- {
- if (OnDVDEject != null) OnDVDEject(this, new EventArgs());
- }
- }
- }
- private Boolean isDVD(String path)
- {
- string videoTS = Path.Combine(path, "VIDEO_TS");
- DirectoryInfo dir = new DirectoryInfo(videoTS);
- if (dir.Exists)
- {
- if (dir.GetFiles("*.vob").Count() > 0) return true;
- else return false;
- }
- else return false;
- }
- }
- }
Viel Spaß damit
(Ein Link oder so wäre nett wenn ihr die Klasse verwendet )
Hmkay.