Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-07-2003
JMGR JMGR is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santa Cruz de Tenerife
Posts: 46
Poder: 0
JMGR Va por buen camino
Cerrar bandeja CDs

Buenas...

Estoy haciendo una aplicacion que necesita extraer datos de dos CDs por lo que cuando le hacen falta dichos datos abre las bandejas de las dos unidades de CD y se pone a la espera...

El problema es que si el usuario cancela la espera no consigo cerrar las dos unidades, solo puedo cerrar una...

He probado los metodos de Trucomania y para abrirlas sin problema, pero pa cerrar...nada

Uno de los metodos de Trucomania lo que hace es mandarle un comando a la unidad de CD que este configurada en Windows como unidad para los Cds de Audio, y es este el metodo que me permite cerrar una sola de las unidades.

Una posible solucion seria cerrar la unidad predeterminada y luego cambiar la configuracion de Windows para cerrar la otra, y volver a dejarla como estaba, pero no se como cambiar la configuracion desde mi programa...

¿Alguna idea...?

Un saludo.
Responder Con Cita
  #2  
Antiguo 25-07-2003
JMGR JMGR is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santa Cruz de Tenerife
Posts: 46
Poder: 0
JMGR Va por buen camino
Acabo de encontrar la clave del registro donde se especifica la unidad de CD predeterminada, es:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\MediaResources\mci\cdaudio\

en la seccion DefaultDrive...

Y en las subclaves Unit0, Unit1, etc... guarda las unidades como valores binarios...

Aqui es donde estoy algo perdido, en la seccion Default Drive aparece un valor binario en plan 00 00 00 00, mientras que en Unit0, etc...los valores son en plan:

Unit0 00 00 00 00 ff 00 00 00
Unit1 01 00 00 00 ff 00 00 00

Lo que quiero hacer es guardar el valor de Default Drive y luego ir cambiandolo por los de las units disponibles, para ir cerrandolas, y al final volver a restaurar el Default Drive original, pero no se como manejar los valores binarios....

Agradeceria que alguien me orientara un poco....

Gracias y un saludo.

Última edición por JMGR fecha: 25-07-2003 a las 15:41:05.
Responder Con Cita
  #3  
Antiguo 25-07-2003
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 21
danytorres Va por buen camino
Smile

Como estas JMGR, me parece interesante poder controlar la bandeja de CD no sera mucho abuso si me enseñara a controlar la bandeja. gracias de antemano.

___________________________
Un saludo a todos......
Responder Con Cita
  #4  
Antiguo 26-07-2003
JMGR JMGR is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santa Cruz de Tenerife
Posts: 46
Poder: 0
JMGR Va por buen camino
Buenas...

Danytorres aqui te pongo el codigo que uso para abrir la bandeja del CD, esta sacado de Trucomania :


Añade 'MMSystem' en el uses de tu form

procedure OpenCd(AOpen:Boolean);
const
DoPlay : array[Boolean] of string =
('Set cdaudio door closed wait',
'Set cdaudio door open wait');
var
MyError : LongInt;
MyErrorString : array[0..MAXERRORLENGTH - 1] of char;
begin
MyError := mciSendString(pChar(DoPlay[AOpen]), nil, 0, 0);
if MyError <> 0 then
begin
MciGetErrorString(MyError,MyErrorString,MAXERRORLENGTH - 1);
Showmessage(MyErrorString);
Exit;
end;
end;


Para abrir el CD:
OpenCd(TRUE);

Para cerrar el CD:
OpenCd(FALSE);


El anterior truco esta muy bien, pero si tenemos más de una unidad de CD no deja seleccionar cual abrir.
Para eso usaremos este otro código:

-Añade 'MPlayer' en el uses de tu form

procedure TForm1.Button1Click(Sender: TObject);

procedure AbreCD(Disco : char);
var
Tokata : TMediaPlayer;
begin
Tokata := TMediaPlayer.Create(nil);
with Tokata do
begin
Parent := Self;
Visible := FALSE;
Shareable := TRUE;
DeviceType := dtCDAudio;
FileName := Disco + ':';
Wait:=FALSE;
Open;
Eject;
Close;
Free;
end;
end;

begin
AbreCD('F');
end;


Lo de cerrar todas las unidades todavia no lo he conseguido pero sigo en ello. Cuando descubra como lo pondre por aqui...
Un saludo.
Responder Con Cita
  #5  
Antiguo 27-07-2003
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 21
danytorres Va por buen camino
Post

Gracias por el codigo funciona muy bien.

______________________
Un saludo a todos...
Responder Con Cita
  #6  
Antiguo 27-07-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
Post

Esta Solucion esta garantizada ya que la he probado, espero que te funcione.
agrega a el uses de tu form MMSystem
en el ejemplo el evento de abrir y cerrar la bandeja lo ejecuto con un boton, mejor dicho 2 botones uno para abrir y otro para cerrar.

el codigo es el siguiente
para abrir:

procedure TForm1.btnOpenClick(Sender: TObject);
begin
mciSendString('Set cdaudio door open wait', nil, 0, 0);
end;

para cerrarla:

procedure TForm1.btnCloseClick(Sender: TObject);
begin
mciSendString('Set cdaudio door closed wait', nil, 0, 0);
end;

este codigo te abrira y cerrara la unidad maestra en tus cd-roms.

ahora bien, si tienes mas de una unidad este seria el codigo:

para abrir:

procedure TForm1.btnOpenClick(Sender: TObject);
begin
// Open drive X: (X being the letter of the drive you wish to open)
mciSendString('open cdaudio!X: alias driveX', nil, 0, 0);
mciSendString('set driveX door open wait', nil, 0, 0);
end;

para cerrarla:

procedure TForm1.btnCloseClick(Sender: TObject);
begin
// Close drive X:
mciSendString('set driveX door closed wait', nil, 0, 0);
end;


espero te sirva...
__________________
ing. frankmch
Responder Con Cita
  #7  
Antiguo 27-07-2003
JMGR JMGR is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santa Cruz de Tenerife
Posts: 46
Poder: 0
JMGR Va por buen camino
OK!
Funciona perfectamente....

Y yo volviendome loco con el registro....

Muchas gracias y un saludo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:21:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi