Open or Close CD-ROM drive






3.97/5 (16 votes)
Sep 28, 2005
1 min read

153429

3370
Eject or close specified CD-ROM or DVD-ROM in the system.
Introduction
The mciSendCommand
function is very useful to handle CD-ROM drives. You can specify which drive you want to eject or close.
Code explanation
For a device initialization you have to use the mciSendCommand
function with the MCI_OPEN
command. The MCI_OPEN_TYPE
flag must be used whenever a device is specified in the mciSendCommand
function. If you open a device by specifying a device-type constant, you must specify the MCI_OPEN_TYPE_ID
flag in addition to MCI_OPEN_TYPE
.
The MCI_OPEN_PARMS
structure contains information for the MCI_OPEN
command. We will use the lpstrDeviceType
and lpstrElementName
members. Devices with extended command sets replace this structure with a device-specific structure so we will get the wDeviceID
member.
lpstrDeviceType
Name or constant identifier of the device type. If this member is a constant, it can be one of the values listed in MCI Device Types.
lpstrElementName
Device element (often a path, e.g. "E:").
wDeviceID
Identifier returned to the application.
To know the reason why I use the ZeroMemory
function, please read this article.
After receiving the wDeviceID
member we are able to send the commands (MCI_SET_DOOR_CLOSED
or MCI_SET_DOOR_OPEN
) to the specific CD-ROM device directly using the MCI_SET
command.
The MCI_CLOSE
command releases access to a device.
void CDRomOpen(BOOL bOpenDrive, char *drive) { MCI_OPEN_PARMS open; DWORD flags; ZeroMemory(&open, sizeof(MCI_OPEN_PARMS)); open.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO; open.lpstrElementName = drive; flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID; if (!mciSendCommand(0, MCI_OPEN, flags, (DWORD) &open)) { mciSendCommand(open.wDeviceID, MCI_SET, (bOpenDrive) ? MCI_SET_DOOR_OPEN : MCI_SET_DOOR_CLOSED, 0); mciSendCommand(open.wDeviceID, MCI_CLOSE, MCI_WAIT, 0); } }
Points of Interest
Also I suggest you examine the whole source code. There is a cute example of how to parse a command line and how to use the application parameters.