5

我想从 .NET 代码中识别 DVDR 介质。这是可能的,如何?

某种调用 Windows API 的库。

更新

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

4

2 回答 2

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 网站上有一篇很好的文章和示例项目,它相当全面地展示了这一点:

使用 C# 和 IMAPI2 刻录和擦除 CD/DVD/蓝光媒体

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

来自文章:

确定媒体类型

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

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

于 2009-07-22T14:38:13.113 回答
1

也许我在代码项目上找到的这篇文章可以提供帮助?

于 2009-07-22T13:01:18.280 回答