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

werw0e

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

  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;
  1. 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 ?

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

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}

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 }

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

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