Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CD Laufwerk öffen - Wo ist das Problem? (https://www.delphipraxis.net/70776-cd-laufwerk-oeffen-wo-ist-das-problem.html)

Daniel G 4. Jun 2006 17:25

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Und zum dritten: :stupid:

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.

skunker 4. Jun 2006 17:35

Re: CD Laufwerk öffen - Wo ist das Problem?
 
hi,
ahh Danke. Aber ich muss dich korrigieren.
Der Fehler liegt am letzten Paramter von DeviceIOControl.

Wenn man tt einfach nurch ne 0 ersetzt funzt das 1a.

vlees91 4. Jun 2006 17:56

Re: CD Laufwerk öffen - Wo ist das Problem?
 
bei mir geht keines eurer codes
0 fehler, aber auch 0 offene laufwerke

skunker 4. Jun 2006 17:57

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Hi:

hier nochmal de Code, der mit sicherheit funzt:

Delphi-Quellcode:
var
handle: THandle;
test: PSecurityAttributes;
back: Boolean;
return: Cardinal;
tt: POverlapped;
begin
handle := CreateFile('\\.\D:',GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,NIL,OPEN_EXISTING,0,0);

back := DeviceIOControl(handle,IOCTL_STORAGE_EJECT_MEDIA,NIL,0,NIL,0,return,0);

end;

Hawkeye219 4. Jun 2006 18:05

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Du solltest das von CreateFile gelieferte Handle im Erfolgsfall aber wieder freigeben, so wie Daniel es in seinem Code gemacht hat.

Gruß Hawkeye

skunker 4. Jun 2006 18:09

Re: CD Laufwerk öffen - Wo ist das Problem?
 
hi, ok also hier komplett als Funktion:

Delphi-Quellcode:
function opendrive(driveletter: String): Boolean;
var
hr:THandle;
buffer: Cardinal;
ret:Boolean;
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 begin
    ret := DeviceIOControl(hr,IOCTL_STORAGE_EJECT_MEDIA,NIL,0,NIL,0,buffer,NIL);
    CloseHandle(hr);
  end;
end;

Daniel G 4. Jun 2006 18:22

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Zitat:

Zitat von vlees91
bei mir geht keines eurer codes
0 fehler, aber auch 0 offene laufwerke

Welches OS?

//EDIT:
@skunker: Stimmt, der is' bei mir aber auch NIL...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr.
Seite 2 von 2     12   

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