Laden...

keine CD oder leere CD im Laufwerk?

Erstellt von laola vor 16 Jahren Letzter Beitrag vor 15 Jahren 2.145 Views
l
laola Themenstarter:in
48 Beiträge seit 2006
vor 16 Jahren
keine CD oder leere CD im Laufwerk?

Hi,

ich habe das Brennen von CD`s mittels der Win API realisiert.
Eingesetzt haben ich dazu folgendes XPBurn.
Klappt alles wunderbar ich habe nur ein Problem:

Ich muss vorher kontrollieren, ob eine leere CD im Laufwerk ist.
Ich suche also eine Möglichkeit mit der geprüft werden kann, ob eine CD eingelegt ist.
DriveInfo hab ich schon durchforstet.

Irgendwelche Ideen? (wmi oder ähnliches?)

2.921 Beiträge seit 2005
vor 15 Jahren

Probiers mal damit (ungetestet):


    class CCDDetect
    {
        ManagementEventWatcher managementEventWatcher = null;
        WqlEventQuery eventQuery;
        ManagementOperationObserver observer =
            new ManagementOperationObserver();

        ManagementScope scope = null;

        // Bind to local machine
        ConnectionOptions opt = new ConnectionOptions();
        public CCDDetect()
        {
            opt.EnablePrivileges = true; //sets required privilege
            scope = new ManagementScope("root\\CIMV2", opt);

            try
            {
                eventQuery = new WqlEventQuery();
                eventQuery.EventClassName = "__InstanceModificationEvent";
                eventQuery.WithinInterval = new TimeSpan(0, 0, 1);

                // DriveType - 5: CDROM
                eventQuery.Condition = @"TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 5";
                managementEventWatcher = new ManagementEventWatcher(scope, eventQuery);

                // register async. event handler
                managementEventWatcher.EventArrived += new EventArrivedEventHandler(CDREventArrived);
                managementEventWatcher.Start();

                // Do something usefull,block thread for testing
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                managementEventWatcher.Stop();
            }
        }

        // Dump all properties
        public void CDREventArrived(object sender, EventArrivedEventArgs e)
        {
            // Get the Event object and display it
            PropertyData propertyData = e.NewEvent.Properties["TargetInstance"];

            if (propertyData != null)
            {
                ManagementBaseObject mbo = propertyData.Value as ManagementBaseObject;

                // if CD removed VolumeName == null
                if (mbo.Properties["VolumeName"].Value != null)
                {
                    Debug.WriteLine("CD has been inserted");
                }
                else
                {
                    Debug.WriteLine("CD has been ejected");
                }
            }
        }
 

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.