FAQ » Sprzęt

Jak wysunąć CD-ROM (CD-RW, DVD itp ) o dowolnej literze

Z jakiejś strony kiedyś brutalnie zerżnąłem :)


{ Dla dowolnej litery :) }
uses
  MMSystem;

procedure OpenCloseCD(Drive: string; OpenCD: Boolean);
{Litera dysku musi być np. "X:",
OpenCD:
true = otworzyć
false = zamknąć}

var
  OpenParm: TMCI_Open_Parms;
  Handle: THandle;
begin
  OpenParm.dwCallback := 0;
  OpenParm.lpstrDeviceType := 'CDAudio';
  OpenParm.lpstrElementName := PChar(Drive);
  OpenParm.dwCallback := Handle;
  if OpenCD then
  begin {Otwieranie napędu CDROM}
   mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT or MCI_OPEN_TYPE, Longint(@OpenParm));
   mciSendCommand(OpenParm.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
  end
  else
  begin

 {Zamykanie napędu CDROM}}
   mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT or MCI_OPEN_TYPE, Longint(@OpenParm));
   mciSendCommand(OpenParm.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
  end;
 {Należy jeszcze zamknąć MCI, inaczej kolejna próba otwarcia albo zamknięcia szuflady CDROM nie powiodła by się}
  mciSendCommand(OpenParm.wDeviceID, MCI_CLOSE, MCI_NOTIFY, Longint(@OpenParm));
  OpenCD := not OpenCD;
end;


Aby po prostu wysunąć CD-ROM(nie wiadomo jaki) należy :

uses
  mmsystem;

 mciSendString('Set cdaudio door open wait',nil,0,handle); {wysunięcie }
 mciSendString('Set cdaudio door closed wait',nil,0,handle); { wsunięcie }

5 komentarzy

Format 2006-08-23 23:44

1. Po co jest linijka (patrz niżej), skoro OpenCD jest zmianną lokalną ?

OpenCD := not OpenCD;

2. Po co są (patrz niżej) ? Jak ten uchwyt jest przekazywany ? Nawet delphi pokazuje komunikat "Variable 'Handle' might not have been initialized"
var
//(...)
Handle: THandle;
begin
//(...)
OpenParm.dwCallback := Handle;

3. Ostatnio, kiedy otrzymywałem komunikat typu "Symbol 'faArchive' is specific to a platform" przy jakiejś przeróbce TreeViewa to działało tylko na moim komputerze. Czy tutaj nie ma takiejmożliwości ?

Zawadzki 2004-11-17 21:17

mi tam w delphi 7 [enterprise] działa :)))) i jest git :p
jest mały błąd w komentarzu:
{Zamykanie napędu CDROM}}   <= nie potrzebny drugi nawias.
ale to taki malutki błąd. myśle że przed dodaniem artukułów autorzy niech sprawdzaja czy to wogóle działa :)) hehe

wotek 2004-01-06 17:01

Należy poprawić linie:
[code]OpenParm.lpstrDeviceType := 'CDAudio'; [/code]
na

OpenParm.lpstrDeviceType := 'CDAudio'; 

oraz
[code]{Zamykanie napędu CDROM}} [/code]
na
{Zamykanie napędu CDROM}

MasterLuk 2003-10-30 10:06

Ale jaki komunikat wysyła win przy otwieraniu napędu do programu - chodzi mi o przejęcie go procedurą:
procedure DriveOpenClose(var: msg: TMessage); WM_COŚ TAM message;
No i...
I tu jest mały błąd - tak być powinno. \ dopiero za '
przy: mciSendString('\Set cdaudio door open wait',nil,0,handle); {wysunięcie }

Endrju 2003-10-06 18:35

Coś jakby nie działa... :-(

(Delphi6 linia 11 procedury : illegal character ""
to samo w tym na dole)