Windows CDROM 弹出

标签 windows winapi

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

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

最佳答案

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

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;
}

关于Windows CDROM 弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58670/

相关文章:

java - 如何用另一个输出替换控制台中的最后一个输出?

html - Mac 与 Windows 的 CSS 问题

c - 在Windows中使用C在两个线程之间共享缓冲区的方法有哪些?

windows - REBASE.EXE 的替代品是什么?

c# - 窗口服务的问题

python - 你如何为 numpy 和 Pandas 修复 "runtimeError: package fails to pass a sanity check"?

windows - 如何在Windows中更改默认的播放和录制设备名称?

sdk - Windows 8 SDK重命名了所有 header ,现在不知道要包含什么?

winapi - 调试 WIN32 焦点错误

c++ - WinAPI : Handling custom and default non-client controls