Und zum dritten:
Der funktionierende Code:
Delphi-Quellcode:
const
IOCTL_STORAGE_EJECT_MEDIA = $2D4808;
procedure TForm1.Button1Click(Sender: TObject);
var
Handle: THandle;
n : DWord;
begin
Handle := CreateFile('
\\.\I:',GENERIC_READ
or GENERIC_WRITE,FILE_SHARE_READ
or FILE_SHARE_WRITE,
NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL
or FILE_FLAG_NO_BUFFERING, 0);
If Handle <> INVALID_HANDLE_VALUE
then
begin
n := 0;
DeviceIOControl(
Handle, IOCTL_STORAGE_EJECT_MEDIA,
NIL, 0,
NIL, 0, n,
NIL);
CloseHandle(
Handle);
end;
end;
Es scheint an der vorletzten Konstante in CreateFile gelegen zu haben. Die war bei dir 0. Übrigens solltest du immer dein
Handle auf Gültigkeit prüfen. Könnte man jetzt auch in eine hübsche Funktion verpacken.