Как извлечь CD-ROM [дубликат]

Возможные дубликаты:
Windows CDROM Eject
Откройте дверцу CD/DVD с помощью вызов Windows API?

Я огляделся и не могу найти простого решения того, что я хочу сделать.

Я хочу открыть компакт-диск из моего приложения C #. Он должен проверить, действительно ли носитель является компакт-диском, а затем открыть его. Есть ли быстрое решение этой проблемы, или мне что-то не хватает?


Проверьте этот URL, он имеет как управляемый, так и неуправляемый код для .net

http://bytes.com/topic/c-sharp/answers/273513-how-eject-cd-rom-c

Попробуйте следующий код:

  using System; using System.Text; using System.Runtime.InteropServices; пространство имен EjectMedia {class Program {static void Main (string [] args) {//Мой CDROM находится на диске E: EjectMedia.Eject (@ "  \.  E: ");  }} class EjectMedia {//Константы, используемые в методах DLL const uint GENERICREAD = 0x80000000;  const uint ОТКРЫТОЕ = 3;  const uint IOCTL_STORAGE_EJECT_MEDIA = 2967560;  const int INVALID_HANDLE = -1; //Обработка файла private static IntPtr fileHandle;  частный статический uint ReturnBytes; //Использование Kernel32 через взаимодействие для доступа к необходимым методам//Получение дескриптора файла [DllImport ("kernel32", SetLastError = true)] static extern IntPtr CreateFile (string fileName, uint requiredAccess, uint shareMode, IntPtr attributes, uint creationDisposition, uint flagsAndAttributes  , IntPtr templateFile);  [DllImport ("kernel32", SetLastError = true)] статический внешний int CloseHandle (IntPtr driveHandle);  [DllImport ("kernel32", SetLastError = true)] статический extern bool DeviceIoControl (IntPtr driveHandle, uint IoControlCode, IntPtr lpInBuffer, uint inBufferSize, IntPtr lpOutBuffer, uint outBufferSize, lpOutBuffer, uint outBufferSize, приводить статический идентификатор lpet)  ) {try {//Создаем дескриптор диска fileHandle = CreateFile (driveLetter, GENERICREAD, 0, IntPtr.Zero, OPENEXISTING, 0, IntPtr.Zero);  if ((int) fileHandle! = INVALID_HANDLE) {//Извлечь диск DeviceIoControl (fileHandle, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero, 0, IntPtr.Zero, 0, ref ReturnBytes, IntPtr.Zero);  }} catch {выбросить новое исключение (Marshal.GetLastWin32Error (). ToString ());  } finally {//Закрываем дескриптор диска CloseHandle (fileHandle);  fileHandle = IntPtr.Zero;  }}}}  

Оцените статью
motary.ru
Добавить комментарий