Re:playing an audio-cd from secondary cd-rom drive
In article <3ef6cc01$0$15312$ba624...@nntp03.dk.telia.net>, "Jimmy Rasmussen"
Quote
<Jim...@get2net.dk> writes:
>I have tried coding it myself by using mci commands, but it just
>doesn't work, so I suspect that this simply cannot be done using mci.
I don't know what mci commands you used, however the following just opens the
tray, but you could put any mci commands in the "mci action commands" section.
The trick is to put the drive in OpenParms.lpStrElementName.
uses
MMSystem;
type
EMMException = class(Exception);
function GetMCIErrorStr(Error : DWord) : string;
{returns string description of mci error}
var
ResultLen : integer;
begin
Result := '';
if Error = 0 then
Exit;
ResultLen := 200;
SetLength(Result, ResultLen);
mciGetErrorString(Error, PChar(Result), ResultLen);
SetLength(Result, ResultLen);
end;
procedure TForm1.OpenCDDoor(Drive : string; DoorOpen : boolean);
{opens or closes CD door,
may be used for any CD drive,
must be used for other than default CD drive}
var
OpenParms : TMCI_Open_Parms;
ErrRet, DevId, dwFlags : DWord;
{mci action command variables}
SetParms : TMCI_Set_Parms;
begin
try
try
{open device}
FillChar(OpenParms, SizeOf(TMCI_Open_parms), #0);
OpenParms.lpStrDeviceType := PChar(MCI_DEVTYPE_CD_AUDIO);
OpenParms.lpStrElementName := PChar(Drive);
dwFlags := MCI_OPEN_TYPE or MCI_OPEN_TYPE_ID or MCI_OPEN_ELEMENT
or MCI_WAIT or MCI_OPEN_SHAREABLE;
ErrRet := mciSendCommand(0, MCI_OPEN, dwFlags, integer(@OpenParms));
if ErrRet <> 0 then
raise EMMException.Create('Open failed : ' + IntToStr(ErrRet) + #13 +
GetMCIErrorStr(ErrRet));
DevId := OpenParms.wDeviceId;
// start of mci action commands
{mci "Set" command - set appropriate flags}
if DoorOpen then
dwFlags := MCI_SET_DOOR_OPEN
else
dwFlags := MCI_SET_DOOR_CLOSED;
ErrRet := mciSendCommand(DevId, MCI_SET, dwFlags, integer(@SetParms));
if ErrRet <> 0 then
raise EMMException.Create('Open failed : ' + IntToStr(ErrRet) + #13 +
GetMCIErrorStr(ErrRet));
// end mci commands
finally
{close device}
mciSendCommand(DevId, MCI_CLOSE, MCI_WAIT, 0);
end;
except
on E:EMMException do
ShowMessage(E.Message);
end;
end;
Alan Lloyd
alangll...@aol.com