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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 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