Puede lograrlo utilizando la API IMAPI v2.
Una vez que tenga las referencias correctas dentro de su proyecto .NET, junto con las varias enumeraciones que se definen dentro de esa API (¡y hay bastantes de ellas!), El código es relativamente sencillo. Algo así como (pseudo-código):
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.
Hay un buen proyecto de artículo y la muestra en el sitio web CodeProject que demuestra esta forma bastante completa:
Burning and Erasing CD/DVD/Blu-ray Media with C# and IMAPI2
Ese proyecto contiene mucho más que la detección de la tipo de medio (¡de ahí el título!), pero contiene código para detectar efectivamente el tipo de medio antes de grabar/borrar el medio.
Desde el artículo:
Determinación del tipo de medios
Para determinar el tipo de medio y el espacio disponible en el disco duro, se crea un objeto MsftDiscFormat2Data y ajuste la grabadora actual en la propiedad del registrador . A continuación, puede obtener el tipo de medio de la propiedad IDiscFormat2Data CurrentPhysicalMediaType.
Una vez que tenga el tipo de medio, cree un objeto MsftFileSystemImage y llame al método ChooseImageDefaultsForMediaType con el tipo de medio.