Ir al contenido


Foto

Abrir y Cerrar un CD-ROM desde Delphi


  • Por favor identifícate para responder
3 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 23 febrero 2009 - 12:22

Para Abrir:



delphi
  1. Uses MMSystem;
  2. mciSendstring('SET CDAUDIO DOOR OPEN WAIT', nil, 0, Self.Handle);



Para Cerrar:



delphi
  1. Uses MMSystem;
  2. mciSendstring('SET CDAUDIO DOOR CLOSED WAIT', nil, 0, Self.Handle);



Ojo, eso sólo funciona en equipos con un CD-Drive único, si existen dos abrirá las dos.

Saludos.
  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 23 febrero 2009 - 12:45

Hola
Muy interesante, gracias.
Saludos
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 23 febrero 2009 - 12:50

Gracias Caral, luego pondré unas funciones más complejas donde podrás seleccionar el CD-ROM a abrir o cerrar en caso de que existan más de una.

Saludos.
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 23 febrero 2009 - 01:18

Bueno, aquí­ otro más complejo usando ASCII:

Abrir:


delphi
  1. function OpenCD(Drive: Char): Boolean;
  2. var
  3.   Res: MciError;
  4.   OpenParm: TMCI_Open_Parms;
  5.   Flags: DWORD;
  6.   S: string;
  7.   DeviceID: Word;
  8. begin
  9.   Result := False;
  10.   S := Drive + ':';
  11.   Flags  := MCI_OPEN_TYPE or MCI_OPEN_ELEMENT;
  12.   with OpenParm do
  13.   begin
  14.     dwCallback := 0;
  15.     lpstrDeviceType := 'CDAudio';
  16.     lpstrElementName := PChar(S);
  17.   end;
  18.   Res := mciSendCommand(0, MCI_OPEN, Flags, Longint(@OpenParm));
  19.   if Res <> 0 then Exit;
  20.   DeviceID := OpenParm.wDeviceID;
  21.   try
  22.     Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
  23.     if Res = 0 then Exit;
  24.     Result := True;
  25.   finally
  26.     mciSendCommand(DeviceID, MCI_CLOSE, Flags, Longint(@OpenParm));
  27.   end;
  28. end;



Cerrar:



delphi
  1. function CloseCD(Drive: Char): Boolean;
  2. var
  3.   Res: MciError;
  4.   OpenParm: TMCI_Open_Parms;
  5.   Flags: DWORD;
  6.   S: string;
  7.   DeviceID: Word;
  8. begin
  9.   Result := False;
  10.   S := Drive + ':';
  11.   Flags  := MCI_OPEN_TYPE or MCI_OPEN_ELEMENT;
  12.   with OpenParm do
  13.   begin
  14.     dwCallback := 0;
  15.     lpstrDeviceType := 'CDAudio';
  16.     lpstrElementName := PChar(S);
  17.   end;
  18.   Res := mciSendCommand(0, MCI_OPEN, Flags, Longint(@OpenParm));
  19.   if Res <> then Exit;
  20.   DeviceID := OpenParm.wDeviceID;
  21.   try
  22.     Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
  23.     if Res = 0 then Exit;
  24.     Result := True;
  25.   finally
  26.     mciSendCommand(DeviceID, MCI_CLOSE, Flags, Longint(@OpenParm));
  27.   end;
  28. end;



Modo de uso, suponiendo que tu CD-Drive tiene asignado la letra D:, buscando en la tabla de ASCII vemos que D corresponde a #68, entonces hacemos lo siguiente colocandolo en un TButton:

Abrir:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. OpenCD(#68);
  4. end;



Cerrar:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. CloseCD(#68);
  4. end;



Saludos.
  • 0




IP.Board spam blocked by CleanTalk.