要在Delphi程式中控制CD-ROM的彈出和關閉,可以利用MMSystem.pas單元的MCI(Media Control Interface)函數。有2個函數可以達到同樣的效果。一個是mciSendCommand函數,另一個是mciSendString函數。下面分別用這2個函數寫的OpenCDDrive函數。
1、使用mciSendCommand:
function OpenCDDrive(IsOpen: Boolean; DriveName: char = #0): Boolean;
var
op: TMCI_Open_Parms;
flags: LongWord;
begin
FillChar(op, Sizeof(TMCI_Open_Parms), 0);
op.lpstrDeviceType := PChar(MCI_DEVTYPE_CD_AUDIO);
flags := MCI_OPEN_TYPE or MCI_OPEN_TYPE_ID;
if DriveName <> #0 then
begin
op.lpstrElementName := PChar(DriveName + ':');
flags := flags or MCI_OPEN_ELEMENT;
end;
Result := mciSendCommand(0, MCI_OPEN, flags, LongWord(@op)) = 0;
if not Result then Exit;
if IsOpen then
mciSendCommand(op.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0)
else
mciSendCommand(op.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
mciSendCommand(op.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);
end;
2、使用mciSendString:
function OpenCDDrive(IsOpen: Boolean; DriveName: char = #0): Boolean;
var
s: string;
begin
if IsOpen then s := 'open'
else s := 'closed';
if DriveName = #0 then
Result := mciSendString(PChar('set cdaudio door ' + s), nil, 0, 0) = 0
else
begin
Result := mciSendString(PChar('open ' + DriveName +': type cdaudio alias cdrom'), nil, 0, 0) = 0; if Result then begin
mciSendString(PChar('set cdrom door ' + s), nil, 0, 0);
mciSendString('close cdrom', nil, 0, 0); end;
end;
end;
OpenCDDrive函數有2個參數,IsOpen為True彈出CD-ROM,False關閉RD_ROM;DriveName為CD-ROM磁碟機名稱,預設為#0。返回True成功,否則失敗。
開啟和關閉預設CD-ROM,即第一個CD-ROM磁碟機可以分別用:
OpenCDDrive(True);和OpenCDDrive(False);
使用CD-ROM磁碟機名稱調用可以分別為(假設CD-ROM磁碟機名稱為“F:”):
OpenCDDrive(True, 'F');和OpenCDDrive(False, 'F');
如有錯誤請指正:maozefa@hotmail.com