4

我正在尝试使用一段代码打开和关闭计算机的 CD 托盘。我一直在使用 MCI 命令,并已包含winmm.lib在我的项目配置的其他依赖项中。我也包括windows.h在内mmsystem.h

我正在使用的代码如下:

mciSendCommand(0, MCI_SET, MCI_SET_DOOR_OPEN, NULL);
mciSendCommand(1, MCI_SET, MCI_SET_DOOR_CLOSED, NULL);

代码构建并运行良好,只是没有 CD 托盘操作正在进行!谁能建议我如何适应这个?

4

3 回答 3

6

如果您有多个 CD 驱动器,则应使用以下代码:

#include <windows.h>  
#include <tchar.h>  
#include <stdio.h>  

int _tmain() 
{ 
   DWORD dwBytes; 
   HANDLE hCdRom = CreateFile(_T("\\\\.\\M:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 
   if (hCdRom == INVALID_HANDLE_VALUE) 
   { 
     _tprintf(_T("Error: %x"), GetLastError()); 
     return 1; 
   } 

   // Open the door:  
   DeviceIoControl(hCdRom, IOCTL_STORAGE_EJECT_MEDIA, NULL, 0, NULL, 0, &dwBytes, NULL); 

   Sleep(1000); 

   // Close the door:  
   DeviceIoControl(hCdRom, IOCTL_STORAGE_LOAD_MEDIA, NULL, 0, NULL, 0, &dwBytes, NULL); 

   CloseHandle(hCdRom); 
} 
于 2014-02-20T13:38:06.480 回答
4

您缺少一些步骤,首先您需要打开设备。

尝试这个:

#pragma comment( lib, "winmm.lib" )

#include "stdafx.h"
#include <Windows.h>
#include <mmsystem.h>


int _tmain()
{

    MCI_OPEN_PARMS mPar = { 0 };
    mPar.lpstrDeviceType = reinterpret_cast<LPCWSTR>(MCI_DEVTYPE_CD_AUDIO);

    // Open device
    mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID, (DWORD)&mPar);

    // Open tray
    mciSendCommand(mPar.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);

    // Close tray
    mciSendCommand(mPar.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);

    // Close device
    mciSendCommand(mPar.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);

    return 0;
}
于 2014-02-20T13:08:55.273 回答
2

尝试使用 DevC++ IDE(仅限 WINDOWS)

然后按照以下步骤操作:

第 1 步:文件 > 项目 > 控制台应用程序 << Enter

第2步:项目选项>参数>链接器>在链接器中写入“-lWinmm” << Enter

第 3 步:打开 cdtray 将这段小代码复制并粘贴到您的 IDE 中。我为此推荐 DevC++。

#include<windows.h>
int main(){
mciSendString("set cdaudio door open",0,0,0);
}

第 4 步:关闭托盘,只需将门“打开”更改为“关闭”

 mciSendString("set cdaudio door closed",0,0,0);
于 2019-06-27T04:56:57.450 回答