Delphi-PRAXiS

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)

Xzeer 27. Jul 2007 08:24


CD/DVD Laufwerk öffnen
 
Hallo,

ich habe diesen Codeschnippsel zum öffnen von Laufwerken gefunden, aber wo kann ich denn sagen welches Laufwerk geöffnet werden soll. Wenn man z.b zwei hat ?

Delphi-Quellcode:
mciSendstring('SET CDAUDIO DOOR OPEN WAIT', nil, 0, Self.Handle);

Matze 27. Jul 2007 08:29

Re: CD/DVD Laufwerk öffnen
 
Hi,

im SDC steht war der selbe Code, jedoch auch eine Funktion, der du den Laufwerksbuchstaben übergeben kannst. Das nur als Alternative zur kurzen Variante.

Blackheart 27. Jul 2007 08:32

Re: CD/DVD Laufwerk öffnen
 
Eine gute Anlaufstelle ist immer die Code-Library dort steht die Lösung. :thumb:

Xzeer 27. Jul 2007 08:33

Re: CD/DVD Laufwerk öffnen
 
OK,

die Funktion klappt, dachte nur, dass es vielleicht auch kürzer geht :wink:

gr4p3fruit 22. Jun 2009 21:25

Re: CD/DVD Laufwerk öffnen
 
kann mit all dem nix anfangen, finde auch in der Code Library keinen Hinweis, wie ich ein bestimmtes CD-Rom Laufwerk, z.B. H:\ auswerfen bzw schließen kann.
Kann mir jemand den Code so bearbeiten, dass ich mit ihm das Laufwerk öffnen bzw schließen kann???

Danke im Vorraus! (Wir haben Delphi nur in der Schule, haben aber noch nichts gelernt über Zugriffe auf Teile außerhalb des Programms)

DeddyH 22. Jun 2009 21:27

Re: CD/DVD Laufwerk öffnen
 
In #2 war doch bereits ein Hinweis auf entsprechenden Code.

Mithrandir 22. Jun 2009 21:27

Re: CD/DVD Laufwerk öffnen
 
Und ich hab mir damals so viel Mühe gegeben... :cry:

http://www.delphipraxis.net/internal...ct.php?t=85760

DeddyH 22. Jun 2009 21:29

Re: CD/DVD Laufwerk öffnen
 
Lässt sich aber noch etwas verbessern ;)

Mithrandir 22. Jun 2009 21:30

Re: CD/DVD Laufwerk öffnen
 
Zitat:

Zitat von DeddyH
Lässt sich aber noch etwas verbessern ;)

Lässt du wohl meine armen kleinen Funktionen in Ruhe! :warn: :mrgreen:

DeddyH 22. Jun 2009 21:31

Re: CD/DVD Laufwerk öffnen
 
Da sollten Compilerwarnungen kommen, die könnte man ja zumindest umgehen :stupid:

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:

gr4p3fruit 22. Jun 2009 23:03

Re: CD/DVD Laufwerk öffnen
 
raus und rein :mrgreen: raus und rein... im 5sek Abstand,... wäre bestimmt auch einfacher gegangen mit einer Laufwerks-Erkenn-, Info-abspeicher- und erst dann Laufwerks-Auswerf-Funktion

XiaN 23. Jun 2009 13:59

Re: CD/DVD Laufwerk öffnen
 
Da muss ich ja schelmisch gestehen, dass ich Laufwerkhopping gleich mal mit meinen 3 Laufwerken ausprobiert hab :corky: :mrgreen:

Ich habs mal mit nem 2x Laufwerk von vor 15 Jahren, einem 40x CD Laufwerk und nem aktuellen DVD Brenner versucht. Da die alle unterschiedlich lange brauchten um aufzugehen und dabei auch unterschiedliche Sounds gemacht haben, hab ich mir gedacht : "Laufwerkhopping hat bestimmt schon einer gemacht. Gibt ja nix, was es nich im Netz gibt.". Nach ner GoogleSuche war mir dann mal wieder klar, wieso kein Ausserirdischer bei uns landen will :mrgreen:

Leider sind sie zu langsam um mit der StarWars Theme aufm Floppy Drive oder auf ner HDD mitzuhalten. Oder halt Mario Brothers auf Teslaspulen.

:cheer: Freaks for the world :cheer:

DeddyH 23. Jun 2009 14:03

Re: CD/DVD Laufwerk öffnen
 
[OT] Da gab es doch auch mal einen Scanner, der "Für Elise" spielt. [/OT]

Mithrandir 23. Jun 2009 14:08

Re: CD/DVD Laufwerk öffnen
 
Und derselbe Scanner spielt auch "Ode an die Freude" ;) :mrgreen:

gr4p3fruit 23. Jun 2009 16:17

Re: CD/DVD Laufwerk öffnen
 
:wall: nein, das wollte ich nicht mit den Laufwerken bezwecken :-D aber die Teslaspulen sind ja mal der Hammer,... Wie geht sowas!? Wechselspannung ok, aber welche Frequenz wird dann gehört? Und wie "schießt" man den Ton ab?

p80286 23. Jun 2009 17:28

Re: CD/DVD Laufwerk öffnen
 
Oh mann die spinnen.......

aber mal im Ernst, könnte man die Version aus #17 nicht in die CodeLib übernehmen?

Für die, die's kurz und knackig mögen ist das doch richtig chic!


Gruß
K-H

hathor 17. Mär 2010 19:05

Re: CD/DVD Laufwerk öffnen
 
Zitat:

Zitat von p80286
Oh mann die spinnen.......

aber mal im Ernst, könnte man die Version aus #17 nicht in die CodeLib übernehmen?

Für die, die's kurz und knackig mögen ist das doch richtig chic!


Gruß
K-H

Aber erst nach Fehlerkorrektur:

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, R, NIL); // W durch R erstzen...<-------------------
  CloseHandle(H);
end;


// z.B.:
LoadMedia('D:', True); // Tür auf
LoadMedia('D:');       // Tür zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 Uhr.

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