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);
|
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. |
Re: CD/DVD Laufwerk öffnen
Eine gute Anlaufstelle ist immer die Code-Library dort steht die Lösung. :thumb:
|
Re: CD/DVD Laufwerk öffnen
OK,
die Funktion klappt, dachte nur, dass es vielleicht auch kürzer geht :wink: |
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) |
Re: CD/DVD Laufwerk öffnen
In #2 war doch bereits ein Hinweis auf entsprechenden Code.
|
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 |
Re: CD/DVD Laufwerk öffnen
Lässt sich aber noch etwas verbessern ;)
|
Re: CD/DVD Laufwerk öffnen
Zitat:
|
Re: CD/DVD Laufwerk öffnen
Da sollten Compilerwarnungen kommen, die könnte man ja zumindest umgehen :stupid:
|
Re: CD/DVD Laufwerk öffnen
Zitat:
|
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:
[/edit]
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; |
Re: CD/DVD Laufwerk öffnen
Stimmt, man sollte Result am Anfang initialisieren oder einen zusätzlichen Else-Zweig basteln.
Hast ja recht... :stupid: |
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? |
Re: CD/DVD Laufwerk öffnen
Die sind doch ganz am Code-Anfang als Konstanten definiert worden.
[edit] Bachstuben verwechselt [/edit] |
Re: CD/DVD Laufwerk öffnen
Die Const-Deklarationen stehen doch im CLib-Beitrag dabei?!
|
Re: CD/DVD Laufwerk öffnen
wozu am Anfang Result zuweisen ... sowas braucht doch eh keiner :mrgreen:
Delphi-Quellcode:
oder gleich alles in eines :stupid:
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:');
Delphi-Quellcode:
PS: wenn schon ein String als Parameter, dann würde ich gleich die Laufwerkskennung so machen, wie sie jeder kennt,
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 ansonsten könnte man auch Char statt String nehmen :angel: |
Re: CD/DVD Laufwerk öffnen
Firma dankt!!!
Delphi-Quellcode:
zwar etwas umständlich gelöst, laufwerksbuchstaben sind aber meistens dabei,... man weiß sich eben zu helfen :-D auch als n00b
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. |
Re: CD/DVD Laufwerk öffnen
:shock: Was soll das denn werden? Laufwerks-HipHop?
|
Re: CD/DVD Laufwerk öffnen
:lol:
|
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
|
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: |
Re: CD/DVD Laufwerk öffnen
[OT] Da gab es doch auch mal einen Scanner, der "Für Elise" spielt. [/OT]
|
Re: CD/DVD Laufwerk öffnen
Und derselbe Scanner spielt auch "Ode an die Freude" ;) :mrgreen:
|
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?
|
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 |
Re: CD/DVD Laufwerk öffnen
Zitat:
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