如何控制CD-ROM的弹出和关闭?(100分)

  • 主题发起人 主题发起人 mayi
  • 开始时间 开始时间
M

mayi

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在做一个播放MP3的软件,想实现控制CD-ROM的弹出和关闭,请问如何实现?最好有源码。
 
mciSendCommand
 
打开CDROM:
mciSendString('Set cdaudiodo
or open wait', nil, 0, handle);
关闭CDROM:
mciSendString('Set cdaudiodo
or closed wait', nil, 0, handle);

---- 为了使用这个函数,记住在单元的USES子句中,一定要包含MMSystem单元。
 
可以察看电子图书"delphi 4.0 参考手册"
 
来晚了,结束吧。
 
不用编了,MP3,CD源程序到处都是,我昨天还见到一个:)
想要我给你发一个
程序员大本营光盘上也有
Good Luck!
 
procedure TsystemForm.Button28Click(Sender: TObject);
begin

mcisendstring('set cdaudiodo
or open',nil,0,handle);
end;


procedure TsystemForm.Button29Click(Sender: TObject);
begin

mcisendstring('set cdaudiodo
or closed',nil,0,handle);
end;
 
The End! 将分数给 xWolf 吧!
 
private
{ Private declarations }
flag,control,hotkeyid,KeyId:integer;
wDeviceID:DWORD;
o:TMCI_Open_Parms;
//p:TMCI_Play_Parms;
s:TMCI_Set_Parms;
g:TMCI_Generic_Parms;
public
{ Public declarations }
function CDPower:Boolean;
function OpenCDROM:Boolean;
function CloseCDROM:Boolean;
function OpenDriver:Boolean;
function CloseDriver:Boolean;
end;


var
Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.CDPower:Boolean;
begin

Result:=true;
if flag=1 then

begin

if OpenCDROM()=false then

Result:=false;
end
else

begin

if CloseCDROM()=false then

Result:=false;
end;

flag:=not flag;
end;

//---------------------------------------------------------------------------
function TForm1.OpenCDROM:Boolean;
begin

Result:=false;
if OpenDriver=false then

exit;
s.dwCallback:=DWORD(Handle);
if mciSendCommand(wDeviceID,MCI_SET,MCI_WAIT or MCI_NOTIFY or MCI_SET_DOOR_OPEN,DWORD(PMCI_OPEN_PARMS(@s)))<>0 then

exit;
if CloseDriver=false then

exit;
Result:=true;;
end;

//---------------------------------------------------------------------------
function TForm1.CloseCDROM:Boolean;
begin

Result:=false;
if OpenDriver=false then

exit;
s.dwCallback:=DWORD(Handle);
if mciSendCommand(wDeviceID,MCI_SET,MCI_WAIT or MCI_NOTIFY or MCI_SET_DOOR_CLOSED,DWORD(PMCI_OPEN_PARMS(@s)))<>0 then

exit;
if CloseDriver=false then

exit;
Result:=true;
end;

//---------------------------------------------------------------------------
function TForm1.OpenDriver:Boolean;
begin

Result:=true;
with odo

begin

dwCallback:=0;
wDeviceID:=0;
lpstrDeviceType:='CDAudio';
lpstrAlias:=nil;
end;

if mciSendCommand(0,MCI_OPEN,DWORD(MCI_WAIT or MCI_NOTIFY or MCI_OPEN_TYPE or MCI_OPEN_SHAREABLE),DWORD(PMCI_OPEN_PARMS(@o)))<>0 then

Result:=false
else

wDeviceID:=o.wDeviceID;
end;

//---------------------------------------------------------------------------
function TForm1.CloseDriver:Boolean;
begin

Result:=true;
g.dwCallback:=DWORD(Handle);
if mciSendCommand(wDeviceID,MCI_CLOSE,MCI_WAIT or MCI_NOTIFY,DWORD(PMCI_OPEN_PARMS(@g)))<>0 then

Result:=false;
end;

//---------------------------------------------------------------------------
有点乱,但是就是这样,楼中几位兄台所说的办法,如果是CD-ROM设备已经被占用就不管用
了(比如说前台有一个CD播放器),还是试试我的办法吧。
 
还没结束,如果你要,我这还有一个控件,
xxz007@yeah.net
请注明要的是什么控件
 
我还写了一个关于系统关机时如果光驱有盘自动弹出的程序。
 
》我还写了一个关于系统关机时如果光驱有盘自动弹出的程序。

我也写过,但是现在机器都是atx电源的,有光盘的话自动弹出,然后系统切断电源
呵呵,光驱托盘就留在外面了
 
to only you:
你怎么判断光驱内是否有盘?
 
关注!另外,光驱开关的消息如何截获?怎样判断光驱到底是开还是关?
 
to liguang:
你的程序都好的,就是弹入后又自动弹出,我只想让它判断光驱的托盘是在外面还是在
里面(是弹出状态还是关闭状态),我这还有100分!
 
我也关注only you是如何实现判断光驱内是否有光盘的。
 
我有一个方法:
工具:老虎钳一把
用老虎钳将光驱托盘拉出,检查有没有盘,然后将托盘推回。。。。。。
 
判断是否有光盘函数,下面是我在DLL中的实现:

function DiskInDrive(const Drive: char): Boolean;stdcall;
var DrvNum: byte;
EMode: Word;
begin

result := false;
DrvNum := ord(Drive);
if DrvNum >= ord('a') then

dec(DrvNum,$20);
EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
if DiskSize(DrvNum-$40) <> -1 then

result := true
else

messagebeep(0);
finally
SetErrorMode(EMode);
end;

end;
 
时间太久,强制结束。 wjiachun
 

Similar threads

S
回复
0
查看
681
SUNSTONE的Delphi笔记
S
S
回复
0
查看
768
SUNSTONE的Delphi笔记
S
后退
顶部