试图打开CD托盘

时间:2014-02-20 12:42:04

标签: c++ winapi mci

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

我正在使用的代码如下:

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

代码构建并运行正常,没有CD托盘操作正在进行!任何人都可以建议我如何适应这个?

3 个答案:

答案 0 :(得分:5)

如果您有多个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); 
} 

答案 1 :(得分:3)

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

试试这个:

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

答案 2 :(得分:0)

尝试使用DevC ++ IDE(仅Windows)

然后执行以下步骤:

步骤1: 文件>项目>控制台应用程序<<输入

步骤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);