Определение наличия диска в приводе DVD
Есть ли простой способ определить, вставлен ли диск в дисковод DVD? Мне все равно, какой диск (CD, DVD или Blu-Ray)?
2 ответа
Решение
Используйте WMI, чтобы определить, находится ли диск в приводе CD / DVD:
foreach (var drive in DriveInfo.GetDrives()
.Where(d => d.DriveType == DriveType.CDRom))
MessageBox.Show(drive.Name + " " + drive.IsReady.ToString());
Перечисление DriveType может помочь вам с типом диска:
CDRom
: Дисковод представляет собой устройство на оптических дисках, например, CD или DVD-ROM.Fixed
: Диск является фиксированным диском.Network
: Диск является сетевым.NoRootDirectory
На диске нет корневого каталога.Ram
: Диск является RAM-диском.Removable
: Диск представляет собой съемное устройство хранения, например, дисковод гибких дисков или флэш-накопитель USB.Unknown
: Тип привода неизвестен.
тип CD/DVD/Blue-Ray см. в перечислении IMAPI_MEDIA_PHYSICAL_TYPE:
- НЕИЗВЕСТНЫЙ
- CD-ROM
- CDR
- CDRW
- DVDROM
- DVDRAM
- DVDPLUSR
- DVDPLUSRW
- DVDPLUSR_DUALLAYER
- DVDDASHR
- DVDDASHRW
- DVDDASHR_DUALLAYER
- DISK
- DVDPLUSRW_DUALLAYER
- HDDVDROM
- HDDVDR
- HDDVDRAM
- BD-ROM
- 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;
}
Как обнаружить CD-ROM загружен в дисковод CD-ROM
Сверху ссылка
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();
}
}