我可以从.NET中唯一识别DVDR(W)(+/-)介质吗?

时间:2009-07-22 11:11:28

标签: c# .net cddvd

我想从.NET代码中识别DVDR媒体。这有可能,怎么样?

某种类型的库,它调用Windows API。

更新

我有很多DVDR,我需要识别它们中的每一个,但不取决于内容或磁盘名称。每个DVDR的某种序列号,DVDR在工厂获得。

2 个答案:

答案 0 :(得分:2)

您可以使用IMAPI v2 API实现此目的。

一旦你的.NET项目中有正确的引用,以及在那个API中定义的各种枚举(并且有相当多的枚举!),代码就相对简单了。像(伪代码):

IDiscRecorder2 discRecorder = (IDiscRecorder2)[*cd/dvd drive*];
discFormatData.Recorder = discRecorder;
IMAPI_MEDIA_PHYSICAL_TYPE mediaType = discFormatData.CurrentPhysicalMediaType;
string mediaTypeString = GetMediaTypeString(mediaType);

where:
IMAPI_MEDIA_PHYSICAL_TYPE is an enum such like:

public enum IMAPI_MEDIA_PHYSICAL_TYPE
{
    IMAPI_MEDIA_TYPE_UNKNOWN = 0,
    IMAPI_MEDIA_TYPE_CDROM = 1,
    IMAPI_MEDIA_TYPE_CDR = 2,
    IMAPI_MEDIA_TYPE_CDRW = 3,
    IMAPI_MEDIA_TYPE_DVDROM = 4,
    IMAPI_MEDIA_TYPE_DVDRAM = 5,
    [not the complete enum...snipped for brevity!]
}

and the "GetMediaTypeString" function simply gives a friendly string
representation of the enum name.

CodeProject网站上有一篇很好的文章和示例项目,它相当全面地展示了这一点:

Burning and Erasing CD/DVD/Blu-ray Media with C# and IMAPI2

该项目不仅仅包含检测媒体类型(因此标题!),还包含在刻录/删除媒体之前有效检测媒体类型的代码。

来自文章:

  

确定媒体类型

     

要确定硬盘驱动器上的介质类型和可用空间,请创建MsftDiscFormat2Data对象并在Recorder属性中设置当前记录器。然后,您可以从IDiscFormat2Data CurrentPhysicalMediaType属性中获取媒体类型。

     

获得媒体类型后,创建一个MsftFileSystemImage对象,并使用媒体类型调用ChooseImageDefaultsForMediaType方法。

答案 1 :(得分:1)

也许这可以在Code Project上找到的文章可以提供帮助吗?