如何控制光驱开关(100分)

  • 主题发起人 主题发起人 tengt
  • 开始时间 开始时间
程序执行时能自动判断光驱状态,如是打开的就关门;如果是关闭的就开门。<br>(不管有无光盘)。执行后退出,不驻留。
 
在user中加MMSystem<br>open:<br> mciSendSting('set cdaudio door open',nil,0,handle);<br>close:<br> mciSendSting('set cdaudio door closed wait',nil,0,handle);<br>至于怎样检测到光驱的状态,还请高人指点。
 
以下代码可以控制不同的光驱 st:='e:/';<br>procedure TMainForm.OpenCD(st:string);<br>var<br>&nbsp; mp : TMediaPlayer;<br>begin<br>&nbsp; mp:= TMediaPlayer.Create(nil);<br>&nbsp; mp.Visible:= false;<br>&nbsp; mp.Parent:= Application.MainForm;<br>&nbsp; mp.DeviceType:= dtCDAudio;<br>&nbsp; mp.FileName :=st;<br>&nbsp; mp.Open;<br>&nbsp; with MP do<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; mciSendCommand(MP.DeviceID,MCI_SET,MCI_SET_DOOR_OPEN, 0);<br>&nbsp; &nbsp; &nbsp; <br>&nbsp; &nbsp; end;<br>&nbsp; mp.Close;<br>&nbsp; mp.free;<br>end;
 
一般来说,获求移动存储设备状态用的是<br>&nbsp;DiskFree 函数,返回 -1 表示没有准备好<br>
 
这个问题在DFW上很多,贴之前最好先搜一下。省很多。
 
另外,好象目前还不能判断光驱的状态,据说微软在这个问题上有Bug。
 
用TmediaPlayer控件是不行的,要涉及到HAL
 
//打开光驱 <br>mciSendString('Set cdaudio door open wait', nil, 0, handle); <br>//关闭光驱 <br>mciSendString('Set cdaudio door closed wait', nil, 0, handle) <br><br><br>监视光驱中是否有光盘拦截消息WM_DEVICECHANGE即可!<br>//响应该消息<br>procedure Tform1.WMDEVICECHANGE(var msgx :Tmessage);<br>const<br>&nbsp; DBT_DEVICEARRIVAL=$8000;<br>&nbsp; DBT_DEVICEREMOVECOMPLETE=$8004;<br>begin<br>&nbsp; inherited;<br>&nbsp; case msgx.WParam of<br>&nbsp; &nbsp; DBT_DEVICEARRIVAL:Caption :='有了!';<br>&nbsp; &nbsp; DBT_DEVICEREMOVECOMPLETE:Caption :='取走了';<br>&nbsp; end;<br>end;<br>
 
如何检测到多个光驱
 
但是还是没有达到检测光驱门开关的情况,<br>[:)]<br>我也想知道如何知道光驱门是打开的还是关闭的,请高手指教.
 
后退
顶部