Windows CDROM弹出

时间:2020-03-05 18:52:07  来源:igfitidea点击:

有谁知道在Windows 2000或者更高版本上以编程方式关闭CD托盘的方法?
存在开放式CD托盘,但是我似乎无法使其关闭,尤其是在W2k下。

我特别在寻找一种从批处理文件执行此操作的方法,如果可能的话,但是API调用就可以了。

解决方案

回答

Nircmd是一个非常方便的免费软件命令行实用程序,具有多种选项,包括打开和关闭CD托盘。

回答

这是使用Win32 API的简单方法:

[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
        protected static extern int mciSendString(string lpstrCommand,StringBuilder lpstrReturnString,int uReturnLength,IntPtr hwndCallback);

 public void OpenCloseCD(bool Open)
 {
    if (Open)
    {
        mciSendString("set cdaudio door open", null, 0, IntPtr.Zero);
    }
    else
    {
        mciSendString("set cdaudio door closed", null, 0, IntPtr.Zero);
    }
}

回答

我有点喜欢使用DeviceIOControl,因为它使我可以弹出任何类型的可移动驱动器(例如USB和闪存盘以及CD托盘)。 Da Codez使用DeviceIOControl正确弹出磁盘的方法是(只需添加适当的错误处理):

bool ejectDisk(TCHAR driveLetter)
{
  TCHAR tmp[10];
  _stprintf(tmp, _T("\\.\%c:"), driveLetter);
  HANDLE handle = CreateFile(tmp, GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
  DWORD bytes = 0;
  DeviceIoControl(handle, FSCTL_LOCK_VOLUME, 0, 0, 0, 0, &bytes, 0);
  DeviceIoControl(handle, FSCTL_DISMOUNT_VOLUME, 0, 0, 0, 0, &bytes, 0);
  DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, &bytes, 0);
  CloseHandle(handle);
  return true;
}