查过以前的帖子,mcisendstring('set cdaudio door open wait',nil,0,handle)只适用于一个光驱的情况

解决方案 »

  1.   

    没人回答?mcisendstring就是API吗?
      

  2.   

    打开与关闭  支持多光驱
    uses MMSYSTEM;function OpenCd(handle: HWND; drive: String): Boolean;  //打开
    Var
      Res : MciError;
      OpenParm: TMCI_Open_Parms;
      Flags : DWord;
      S : String;
      DeviceID : Word;
    begin
      Result:=false;
      S:=Drive+':';
      Flags:=mci_Open_Type or mci_Open_Element;
      With OpenParm do begin
        dwCallback := 0;
        lpstrDeviceType := 'CDAudio';
        lpstrElementName := PChar(S);
      end;
      Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
      IF Res<>0 Then exit;
      DeviceID:=OpenParm.wDeviceID;
      try
        Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
        IF Res=0 Then exit;
        Result:=True;
      finally
        mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
      end;
    end;function CloseCd(handle: HWND; drive: String): Boolean;   //关闭
    Var
      Res : MciError;
      OpenParm: TMCI_Open_Parms;
      Flags : DWord;
      S : String;
      DeviceID : Word;
    begin
      Result:=false;
      S:=Drive+':';
      Flags:=mci_Open_Type or mci_Open_Element;
      With OpenParm do begin
        dwCallback := 0;
        lpstrDeviceType := 'CDAudio';
        lpstrElementName := PChar(S);
      end;
      Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
      IF Res<>0 Then exit;
      DeviceID:=OpenParm.wDeviceID;
      try
        Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
        IF Res=0 Then exit;
        Result:=True;
      finally
        mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
      end;
    end;