Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wird auf CD-Rom zugegriffen (https://www.delphipraxis.net/89843-wird-auf-cd-rom-zugegriffen.html)

VizeTE 6. Apr 2007 18:47


Wird auf CD-Rom zugegriffen
 
Hallo,

ich möchte herausfinden ob z.Z. auf das CD-Rom zugegriffen wird.
Zum hintergrund: Wenn ich eine DVD am Rechner ansehe dann soll mein Programm erkennen, dass die DVD am Ende angekommen ist. Ich denke das Laufwerk wird dann nicht mehr vom Abspielprogramm verwendet. Dann soll mein Programm Dinge tun.

Ich habe versucht was zur Statusabfrage herauszufinden. In Beiträgen wird oft auf die Funktionen DeviceIOControl und mciSendString verwiesen. Dabei ging es aber immer um die Abfrage ob das Laufwerk geöffnet oder geschlossen ist.

Hat das jemand schon mal gemacht? Oder hat noch jemand eine andere Herangehensweise?


Vielen Dank schon mal und Frohe Oster ;)

Garfield 6. Apr 2007 23:46

Re: Wird auf CD-Rom zugegriffen
 
Zitat:

Zitat von VizeTE
Ich habe versucht was zur Statusabfrage herauszufinden. In Beiträgen wird oft auf die Funktionen DeviceIOControl und mciSendString verwiesen. Dabei ging es aber immer um die Abfrage ob das Laufwerk geöffnet oder geschlossen ist.

Ob ein Kaufwerk geöffnet oder geschlossen ist, kannst Du im fünften Beitrag dieses Threads sehen. Dafür sind Schreib-/Brennrechte erforderlich.

Die Prüfung, ob auf die CD/DVD zugegriffen werden kann, kannst Du mit CreateFile erledigen. Ob auf eine eingelegte CD/DVD zugegriffen werden kann, kann man mit DeviceIOControl prüfen. Für NT, 2000 und XP zum Beispiel
Delphi-Quellcode:
...
uses
  Windows, SysUtils;
...

function Drive_Access (const Drive: Char; var Status: Integer) : Boolean;
const
  IOCTL_CDROM_CHECK_VERIFY = 149504;
var
  DrivewHandle : THandle;
  nb          : DWord;
begin
  Result := False;

  DriveHandle := CreateFile(PChar('\\.\' + Drive + ':'),
                            GENERIC_READ,
                            FILE_SHARE_READ,
                            NIL,
                            OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING,
                            0);

  nb := 0;

  if DriveHandle <> INVALID_HANDLE_VALUE
  then
    Result := DeviceIOControl(DriveHandle,
                             IOCTL_CDROM_CHECK_VERIFY,
                             NIL,
                             0,
                             NIL,
                             0,
                             nb,
                             NIL);
 
  Status := GetLastError;

  CloseHandle(DriveHandle);
end;
Anstelle von GetLastError kann man sich auch den entsprechenden String holen. Die Function funktioniert auch mit eingeschränkten Rechten da keine Schreib-/Brennrechte benötigt werden.

VizeTE 7. Apr 2007 09:52

Re: Wird auf CD-Rom zugegriffen
 
Erstmal Danke für die Mühe aber mir gings darum herauszufinden ob auf das Laufwerkzugegriffen wird
(von irgendeinen anderen Programm)
und nicht ob ich die Möglichkeit habe auf das Laufwerk zuzugreifen.

Garfield 7. Apr 2007 14:59

Re: Wird auf CD-Rom zugegriffen
 
Zitat:

Zitat von VizeTE
... mir gings darum herauszufinden ob auf das Laufwerkzugegriffen wird ...

Wenn das DriveHandle ungültig ist oder DeviceIOControl den Wert False zurück gibt ist GetLastError ungleich 0. Zu diesem Wert kann man sich auch einen String holen (habe leider keine entsprechende Function parat). Dieser Wert/String könnte zum Beispiel aussagen, dass das Laufwerk gerade von einem anderen Prozess verwendet wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz