weis: Du kan hente et komplet eksempel på nedenståede link:
http://home1.inet.tele.dk/j-cgeert/cdrom.zipBemærk at der går lidt tid inden teksten på knappen skifter da cd\'en først lige skal loades!
Komplet kode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, MPlayer, MMSystem;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function IsDriveCD(Drive : char) : longbool;
var DrivePath : string;
begin
DrivePath := Drive + \':\\\';
result := LongBool(GetDriveType(PChar(DrivePath)) and DRIVE_CDROM);
end;
function EjectCD(Drive : char) : bool;
var
mp : TMediaPlayer;
begin
result := false;
Application.ProcessMessages;
if not IsDriveCD(Drive) then exit;
mp := TMediaPlayer.Create(nil);
mp.Visible := false;
mp.Parent := Application.MainForm;
mp.Shareable := true;
mp.DeviceType := dtCDAudio;
mp.FileName := Drive + \':\';
mp.Open;
Application.ProcessMessages;
mp.Eject;
Application.ProcessMessages;
mp.Close;
Application.ProcessMessages;
mp.free;
result := true;
end;
procedure CloseCD(Drive : char);
var
mp : TMediaPlayer;
begin
// result := false;
Application.ProcessMessages;
mp := TMediaPlayer.Create(nil);
mp.Visible := false;
mp.Parent := Application.MainForm;
mp.Shareable := true;
mp.DeviceType := dtCDAudio;
mp.FileName := Drive + \':\';
mp.Open;
Application.ProcessMessages;
mciSendCommand(mp.DeviceID,
MCI_SET, MCI_SET_DOOR_CLOSED, 0);
Application.ProcessMessages;
mp.Close;
Application.ProcessMessages;
mp.free;
// result := true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
If Button1.Caption = \'Eject\' then begin
if not EjectCD(\'F\') then
ShowMessage(\'Not A CD Drive\')
else
Button1.Caption := \'Close\';
end
else begin
CloseCD(\'F\');
Button1.Caption := \'Eject\';
end;
end;
end.
Snowball