【问题标题】:Detecting if disc is in DVD drive检测光盘是否在 DVD 驱动器中
【发布时间】:2012-07-10 08:17:49
【问题描述】:

是否有一种简单的方法可以检测 DVD 驱动器中是否插入了光盘?我不在乎哪种光盘(CD、DVD 或蓝光)?

【问题讨论】:

  • 有一种简单的方法可以找到您想要的答案。它被称为搜索。仅在这个网站上,就有大量建议的解决方案。
  • @Musa - 这个问题不是我要问的。这个问题是关于检测驱动器是 cdrom 驱动器还是硬盘驱动器。与我的要求无关

标签: c#


【解决方案1】:

使用 WMI 检测 CD/DVD 驱动器中的磁盘:

foreach (var drive in DriveInfo.GetDrives()
                               .Where(d => d.DriveType == DriveType.CDRom))  
MessageBox.Show(drive.Name + " " + drive.IsReady.ToString()); 

来自here

DriveType Enumeration可以帮助你什么盘:

  • CDRom :驱动器是光盘设备,例如 CD 或 DVD-ROM。
  • Fixed :驱动器是固定磁盘。
  • Network :驱动器是网络驱动器。
  • NoRootDirectory 驱动器没有根目录。
  • Ram :驱动器是 RAM 磁盘。
  • Removable :驱动器是可移动存储设备,例如软盘驱动器或 USB 闪存驱动器。
  • Unknown:驱动器类型未知。

CD/DVD/蓝光类型见IMAPI_MEDIA_PHYSICAL_TYPE enumeration:

  • 未知
  • 光盘
  • CDR
  • CDRW
  • DVD 光盘
  • DVD 内存
  • DVDPLUSR
  • DVDPLUSRW
  • DVDPLUSR_DUALLAYER
  • DVDDASHR
  • DVDDASHRW
  • DVDDASHR_DUALLAYER
  • 磁盘
  • DVDPLUSRW_DUALLAYER
  • HDDVDROM
  • HDDVDR
  • HDDVDRAM
  • BDROM
  • BDR
  • BDRE
  • 最大

你的代码可能是这样的:

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;
}

来自here

【讨论】:

    【解决方案2】:

    How to Detect CD-ROM is loaded in the CD-ROM drive

    从上面的链接

    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();
        }
    }
    

    【讨论】:

    • 由于链接过期,仅提供链接并不构成一个好的答案。 meta.stackexchange.com/questions/8231/…
    • 你是对的,但是当一个东西已经存在时,我们为什么不重新使用它
    • 我已经把代码贴出来了,那就不用投反对票了。
    • 是的,反对的选民是愚蠢的。 (也因为他们也失去了声誉)我会帮你到 0。
    猜你喜欢
    • 2015-12-24
    • 2016-02-27
    • 1970-01-01
    • 2016-07-15
    • 2023-03-10
    • 2011-09-14
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多