Is there an easy way to detect if a disc is inserted in the DVD drive? I don't care what kind of disc (CD, DVD or Blu-Ray)?
            Asked
            
        
        
            Active
            
        
            Viewed 9,831 times
        
    7
            
            
        - 
                    4http://stackoverflow.com/questions/148742/how-to-detect-if-any-specific-drive-is-a-hard-drive – Musa Jul 10 '12 at 19:22
 - 
                    4There is an easy way to do find the answer you seek. It is called searching. On this very site alone there are a plethora of proposed solutions. – TheZ Jul 10 '12 at 19:24
 - 
                    @Musa - That question isn't what I'm asking. That question is about detecting if a drive is a cdrom drive or a hard drive. Nothing to do with what I'm asking – Icemanind Jul 10 '12 at 19:40
 
2 Answers
15
            Use WMI to detect if disk in CD/DVD drive:
foreach (var drive in DriveInfo.GetDrives()
                               .Where(d => d.DriveType == DriveType.CDRom))  
MessageBox.Show(drive.Name + " " + drive.IsReady.ToString()); 
from here.
DriveType Enumeration can help you what kind of disc:
CDRom: The drive is an optical disc device, such as a CD or DVD-ROM.Fixed: The drive is a fixed disk.Network: The drive is a network drive.NoRootDirectoryThe drive does not have a root directory.Ram: The drive is a RAM disk.Removable: The drive is a removable storage device, such as a floppy disk drive or a USB flash drive.Unknown: The type of drive is unknown.
for kind of CD/DVD/Blue-Ray see IMAPI_MEDIA_PHYSICAL_TYPE enumeration:
- UNKNOWN
 - CDROM
 - CDR
 - CDRW
 - DVDROM
 - DVDRAM
 - DVDPLUSR
 - DVDPLUSRW
 - DVDPLUSR_DUALLAYER
 - DVDDASHR
 - DVDDASHRW
 - DVDDASHR_DUALLAYER
 - DISK
 - DVDPLUSRW_DUALLAYER
 - HDDVDROM
 - HDDVDR
 - HDDVDRAM
 - BDROM
 - BDR
 - BDRE
 - MAX
 
your code may be like this:
public bool IsDiscAvailable(int driveNumber)
{
    MsftDiscMaster2Class discMaster = new MsftDiscMaster2Class();
    string id = discMaster[driveNumber];
    MsftDiscRecorder2Class recorder = new MsftDiscRecorder2Class();
    recorder.InitializeDiscRecorder(id);
    MsftDiscFormat2DataClass dataWriter = new MsftDiscFormat2DataClass();
    if (dataWriter.IsRecorderSupported(recorder))
    {
        dataWriter.Recorder = recorder;
    }
    else
    {
        Console.WriteLine("Recorder not supported");
        return false;
    }
    if (dataWriter.IsCurrentMediaSupported(recorder))
    {
        var media = dataWriter.CurrentPhysicalMediaType;
        if (media == IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_UNKNOWN)
        {
            Console.WriteLine("Unknown media or no disc");
        }
        else
        {
            Console.WriteLine("Found disc type {0}", media);
            return true;
        }
    }
    else
    {
        Console.WriteLine("Disc absent or invalid.");
    }
    return false;
}
from here.
        Ria
        
- 10,237
 - 3
 - 33
 - 60
 
1
            
            
        How to Detect CD-ROM is loaded in the CD-ROM drive
From above link
using System;
using System.Management;
class Application
{
    public static void Main()
    {
        SelectQuery query = 
            new SelectQuery( "select * from win32_logicaldisk where drivetype=5" );
        ManagementObjectSearcher searcher = 
            new ManagementObjectSearcher(query);
        foreach( ManagementObject mo in searcher.Get() )
        {
            // If both properties are null I suppose there's no CD
            if(( mo["volumename"] != null) || (mo["volumeserialnumber"] != null))
            {
                Console.WriteLine("CD is named: {0}", mo["volumename"]);
                Console.WriteLine("CD Serial Number: {0}", mo["volumeserialnumber"]);
            }
            else
            {
                Console.WriteLine("No CD in Unit");
            }
        }
        // Here to stop app from closing
        Console.WriteLine("\nPress Return to exit.");
        Console.Read();
    }
}
        MoonKnight
        
- 23,214
 - 40
 - 145
 - 277
 
        Waqar Janjua
        
- 6,113
 - 2
 - 26
 - 36
 
- 
                    4Because links expire, simply providing a link does not constitute a good answer. http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers/8259#8259 – spender Jul 10 '12 at 19:26
 - 
                    you are right, but when a thing already exits why not we reuse it – Waqar Janjua Jul 10 '12 at 19:27
 - 
                    
 - 
                    1Yeah, down voters are dumb. (also because they lose reputation as well) I'll help you up to 0. – Bitterblue Sep 03 '13 at 09:50