Newsgroup: it.comp.lang.delphi
Titolo: Comando per aprire il cdrom ?

Ciao a tutti,
prima di sparare a zero :) ho letto le FAQ, solo che a me servirebbe
aprire il cassetto del cdrom dato il drive.
Esempio: devo eseguire un programma da cdrom (quindi conosco il drive
tramite paramstr(0) ) e prima di uscire voglio far uscire il cdrom.
Grazie in anticipo.
================================================================================================
To reply, remove LEVAME
My digital photos: 
http://www.alecab.it/cai

 aprire il cassetto del cdrom dato il drive.
Tempo addietro avevo il tuo stesso problema ... non vorrei dire una
stupidata ma lo ho risolto con MCISendCommand() [per enumerare le unità
cdrom è sufficiente un ciclo e GetDriveType()], se ritrovo il codice lo
posto. ciao
--
- Carlo -
c.b...@libero.it

posto. ciao
Saresti molto gentile .. ora provo a cercare documentazione per la
funzione MCISendCommand().
Ciao
Fulvio


 aprire il cassetto del cdrom dato il drive.
Ciao, questa func. dovrebbe funzionare solo sotto Win9x... non credo
sotto NT/2K :(
{Non l'ho scritta io, ho lasciato i crediti nella func.}
Type
   TIoCtlRegs = record
    EBX, EDX, ECX, EAX, EDI, ESI, Flags: DWORD;
  end;
Function EjectMedia(Drive: Char): Integer;
Var { Special thanks to: Steve Schafer (TeamB) }
VxD: THandle; { He's the one that helped me with this }
Regs: TIoCtlRegs; { and wrote this function !! }
Return: DWORD;
Begin
{ Create handle }
VxD := CreateFile('\\.\VWIN32', 0, 0, nil, 0, FILE_FLAG_DELETE_ON_CLOSE,
0);
{ This will probably not work with WindowsNT }
with Regs do
begin
EAX := $440D;
EBX := Ord(UpCase(Drive)) - Ord('A') + 1; { assign drive letter }
ECX := $0849;
Flags := $0001;
end;
{ Activate MediaEject }
DeviceIOControl(VxD, 1, @Regs, SizeOf(Regs), @Regs, SizeOf(Regs),
Return,
nil);
CloseHandle(VxD); { Close handle }
Result := Regs.EAX;
End;
--
Ciao !  Davide DG.

 ha scritto nel messaggio
news:MTIk7.19561$MO.6...@news.infostrada.it...

Uses MMSystem
    //Open CDROM Drive
    mciSendString('Set cdaudio door open', nil, 0, handle);
    //Close CDROM Drive
    mciSendString('Set cdaudio door closed', nil, 0, handle);
--
Massimo
mago_merlino(at)
bigfoot.com

     mciSendString('Set cdaudio door open', nil, 0, handle);
questa è la stessa risposta della FAQ, che non risponde alla richiesta
dell'apertura dato il drive.
Ciao


{Non l'ho scritta io, ho lasciato i crediti nella func.}
Ciao,
interessante il codice. Purtroppo confermo che sotto NT non funziona,
mentre io cerco un codice "portabile" (parola grossa) tra le varie
versioni di winzozz a 32bit.
Ciao.
Fulvio


> prima di sparare a zero :) ho letto le FAQ, solo che a me servirebbe

Mi auto-rispondo da solo :)
Trovato dopo una ricerca su google:
==========================================================
Questo funziona su Win NT + 2000:
procedure CDTRAY(Drive: Char);
var
  cd: THandle;
  ret: DWORD;
begin
  // Note: Stefan opened CD-ROM with GENERIC_READ OR GENERIC_WRITE.
  // That should be correct according to MS documentation but was not
working for me.
  // This (just GENERIC_READ) seems to be working on all computers.
  cd := CreateFile(PChar('\\.\'+Drive+':'), GENERIC_READ, 0, nil,
OPEN_EXISTING, 0, 0);
   if CD <> INVALID_HANDLE_VALUE then begin
    // eject
    if not DeviceIoControl(cd,IOCTL_STORAGE_EJECT_MEDIA, nil, 0, nil,
0, ret, nil) then { report error };
    // load
    if not DeviceIoControl(cd,IOCTL_STORAGE_LOAD_MEDIA, nil, 0, nil,
0, ret, nil) then { report error };
    CloseHandle(cd);
  end;
Ciao.
Fulvio
