Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CD/DVD Laufwerk öffnen (https://www.delphipraxis.net/96594-cd-dvd-laufwerk-oeffnen.html)

Mithrandir 22. Jun 2009 21:34

Re: CD/DVD Laufwerk öffnen
 
Zitat:

Zitat von DeddyH
Da sollten Compilerwarnungen kommen[...]

Echt? :gruebel:

DeddyH 22. Jun 2009 21:35

Re: CD/DVD Laufwerk öffnen
 
"Rückgabewert der Funktion könnte undefiniert sein" würde ich da erwarten.

[edit] OK, ich ändere das mal aus der hohlen Hand ab (ohne Gewähr):
Delphi-Quellcode:
const
  IOCTL_STORAGE_EJECT_MEDIA = $2D4808;
  IOCTL_STORAGE_LOAD_MEDIA = $2D480C;

//Fährt die Schublade ein
function LoadMedia(DriveLetter: String): Boolean;
var
  buffer: Cardinal;
begin
  Result := false;
  hr := CreateFile(PChar('\\.\'+DriveLetter+':'), GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, OPEN_EXISTING, 0, 0);
  if hr <> INVALID_HANDLE_VALUE then
    begin
      Result := DeviceIOControl(hr, IOCTL_STORAGE_LOAD_MEDIA, NIL, 0, NIL, 0, buffer, NIL);
      CloseHandle(hr);
    end;
end;

//Fährt die Schublade aus
function EjectMedia(DriveLetter: String): Boolean;
var
  hr:THandle;
  buffer: Cardinal;
begin
  Result := false;
  hr := CreateFile(PChar('\\.\'+DriveLetter+':'), GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, OPEN_EXISTING, 0, 0);
  if hr <> INVALID_HANDLE_VALUE then
    begin
      Result := DeviceIOControl(hr, IOCTL_STORAGE_EJECT_MEDIA, NIL, 0, NIL, 0, buffer, NIL);
      CloseHandle(hr);
    end;
end;
[/edit]

Mithrandir 22. Jun 2009 21:36

Re: CD/DVD Laufwerk öffnen
 
Stimmt, man sollte Result am Anfang initialisieren oder einen zusätzlichen Else-Zweig basteln.

Hast ja recht... :stupid:

gr4p3fruit 22. Jun 2009 21:38

Re: CD/DVD Laufwerk öffnen
 
[Pascal Fehler] Unit1.pas(34): E2003 Undefinierter Bezeichner: 'IOCTL_STORAGE_LOAD_MEDIA'
[Pascal Fehler] Unit1.pas(49): E2003 Undefinierter Bezeichner: 'IOCTL_STORAGE_EJECT_MEDIA'
[Pascal Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden


sag ich da nur :shock: und jetzt?

DeddyH 22. Jun 2009 21:40

Re: CD/DVD Laufwerk öffnen
 
Die sind doch ganz am Code-Anfang als Konstanten definiert worden.

[edit] Bachstuben verwechselt [/edit]

fkerber 22. Jun 2009 21:41

Re: CD/DVD Laufwerk öffnen
 
Die Const-Deklarationen stehen doch im CLib-Beitrag dabei?!

himitsu 22. Jun 2009 21:47

Re: CD/DVD Laufwerk öffnen
 
wozu am Anfang Result zuweisen ... sowas braucht doch eh keiner :mrgreen:
Delphi-Quellcode:
function LoadMedia(const Drive: String): Boolean;
var H: THandle;
  R: Cardinal;
begin
  H := CreateFile(PChar('\\.\' + Drive), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, OPEN_EXISTING, 0, 0);
  Result := (H <> INVALID_HANDLE_VALUE) and
    DeviceIOControl(H, IOCTL_STORAGE_LOAD_MEDIA, NIL, 0, NIL, 0, R, NIL);
  CloseHandle(H);
end;


// z.B.:
LoadMedia('D:');
oder gleich alles in eines :stupid:
Delphi-Quellcode:
function LoadMedia(const Drive: String; Eject: Boolean = False): Boolean;
const Command: array[Boolean] of Cardinal = (IOCTL_STORAGE_LOAD_MEDIA, IOCTL_STORAGE_EJECT_MEDIA);
var H: THandle;
  R: Cardinal;
begin
  H := CreateFile(PChar('\\.\' + Drive), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, OPEN_EXISTING, 0, 0);
  Result := (H <> INVALID_HANDLE_VALUE) and
    DeviceIOControl(H, Command[Eject], NIL, 0, NIL, 0, W, NIL);
  CloseHandle(H);
end;


// z.B.:
LoadMedia('D:', True); // Tür auf
LoadMedia('D:');       // Tür zu
PS: wenn schon ein String als Parameter, dann würde ich gleich die Laufwerkskennung so machen, wie sie jeder kennt,

ansonsten könnte man auch Char statt String nehmen :angel:

gr4p3fruit 22. Jun 2009 22:41

Re: CD/DVD Laufwerk öffnen
 
Firma dankt!!!

Delphi-Quellcode:
var
  Form1: TForm1;
  a : boolean;

implementation

{$R *.dfm}

const
  IOCTL_STORAGE_EJECT_MEDIA = $2D4808;
  IOCTL_STORAGE_LOAD_MEDIA = $2D480C;

//Fährt die Schublade ein
function LoadMedia(DriveLetter: String): Boolean;
var
  hr:THandle;
  buffer: Cardinal;
begin
  hr := CreateFile(PChar('\\.\'+DriveLetter+':'), GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, OPEN_EXISTING, 0, 0);
  if hr <> INVALID_HANDLE_VALUE then
    if DeviceIOControl(hr, IOCTL_STORAGE_LOAD_MEDIA, NIL, 0, NIL, 0, buffer, NIL) then
      result := true
     else
      result := false;
    CloseHandle(hr);
  a:=False;
end;

//Fährt die Schublade aus
function EjectMedia(DriveLetter: String): Boolean;
var
  hr:THandle;
  buffer: Cardinal;
begin
  hr := CreateFile(PChar('\\.\'+DriveLetter+':'), GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, OPEN_EXISTING, 0, 0);
  if hr <> INVALID_HANDLE_VALUE then
    if DeviceIOControl(hr, IOCTL_STORAGE_EJECT_MEDIA, NIL, 0, NIL, 0, buffer, NIL) then
      result := true
     else
      result := false;
    CloseHandle(hr);
  a:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 begin
  EjectMedia('D');
  EjectMedia('E');
  EjectMedia('F');
  EjectMedia('G');
  EjectMedia('H');
  EjectMedia('I');
 end;

 Timer1.Enabled:=true;
 hide;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if a=True

 then
  begin
  LoadMedia('D');
  LoadMedia('E');
  LoadMedia('F');
  LoadMedia('G');
  LoadMedia('H');
  LoadMedia('I');
  end

 else
  begin
  EjectMedia('D');
  EjectMedia('E');
  EjectMedia('F');
  EjectMedia('G');
  EjectMedia('H');
  EjectMedia('I');
 end;

end;

end.
zwar etwas umständlich gelöst, laufwerksbuchstaben sind aber meistens dabei,... man weiß sich eben zu helfen :-D auch als n00b

DeddyH 22. Jun 2009 22:46

Re: CD/DVD Laufwerk öffnen
 
:shock: Was soll das denn werden? Laufwerks-HipHop?

Mithrandir 22. Jun 2009 22:59

Re: CD/DVD Laufwerk öffnen
 
:lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz