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