AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CD- oder DVD-Laufwerk

Ein Thema von Garfield · begonnen am 25. Jan 2012 · letzter Beitrag vom 26. Jan 2012
Antwort Antwort
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#1

CD- oder DVD-Laufwerk

  Alt 25. Jan 2012, 17:24
Über das Windows Device Management läßt sich mit der Funktion DeviceIoControl und dem ControlCode IOCTL_STORAGE_GET_MEDIA_TYPES_EX die Struktur GET_MEDIA_TYPES ermitteln, welche den Device Type (u.a. CD und DVD) enthält. Den Zugriff auf das Laufwerk erhält man mit CreateFile. Da nur lesender Zugriff benötigt wird, sollte es keine Rechteprobleme geben.

Der ControlCode IOCTL_STORAGE_GET_MEDIA_TYPES_EX und die Struktur GET_MEDIA_TYPES:
Delphi-Quellcode:
const
  FILE_DEVICE_CD_ROM = $00000002;
  FILE_DEVICE_MASS_STORAGE = $0000002d;
  FILE_DEVICE_DVD = $00000033;

const
  IOCTL_STORAGE_BASE = FILE_DEVICE_MASS_STORAGE;

const
  METHOD_BUFFERED = 0;

const
  FILE_ANY_ACCESS = 0;

const
  IOCTL_STORAGE_GET_MEDIA_TYPES_EX = (IOCTL_STORAGE_BASE shl 16) or ($0301 shl 2) or METHOD_BUFFERED or (FILE_ANY_ACCESS shl 14);

type
  TGET_MEDIA_TYPES = packed record
    DeviceType : DWord;
    MediaInfoCount : DWord;
// MediaInfo : Array[0..0] of TDEVICE_MEDIA_INFO;
  end;
  PGET_MEDIA_TYPES = ^TGET_MEDIA_TYPES;
Die MediaInfo ist auskommentiert, da sie nicht benötigt wird.

Die Funktion:
Delphi-Quellcode:
function GetMediaType(sDrive: AnsiChar; out sType: AnsiString): Boolean;
{*******************************************************************************
*  Laufwerkstyp: CD, DVD, Unbekannt.
}

var
  hDevice : THandle;
  mediaTypes : PGET_MEDIA_TYPES;
  cBuffer : array [0..2047] of AnsiChar;
  nReturned : Cardinal;
begin
  Result := False;
  hDevice := CreateFileA(PAnsiChar(Format('\\.\%s:', [sDrive])), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0 );
  if hDevice <> INVALID_HANDLE_VALUE
  then begin
    nReturned := 0;
    Result := DeviceIoControl(hDevice, IOCTL_STORAGE_GET_MEDIA_TYPES_EX, nil, 0, @cBuffer, SizeOf(cBuffer), nReturned, nil);
    if Result
    then begin
      mediaTypes := @cBuffer;
      case mediaTypes.DeviceType of
        FILE_DEVICE_CD_ROM : sType := 'CD-ROM';
        FILE_DEVICE_DVD : sType := 'DVD';
        else sType := 'Unknown';
      end;
    end;
    CloseHandle(hDevice);
  end;
end;
Der Funktion wird das Laufwerksbuchstabe übergeben. Das Ergebnis der Funktion entspricht dem Ergebnis der Ausführung der Funktion DeviceIOControl. War die Ausführung erfolgreich bekommt man als Type CD-ROM, DVD oder unbekannt zurück.
Miniaturansicht angehängter Grafiken
cd-oder-dvd.png  
Angehängte Dateien
Dateityp: 7z CD_or_DVD.7z (1,7 KB, 26x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Coffeecoder
Coffeecoder

Registriert seit: 27. Apr 2011
242 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: CD- oder DVD-Laufwerk

  Alt 25. Jan 2012, 17:54
Hi,
Ich wollte mein Feedback abgeben zu dem Programm. Das Programm hat meine 2 DVD Laufwerke richtig erkannt.
Super
Coffeecoder
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#3

AW: CD- oder DVD-Laufwerk

  Alt 26. Jan 2012, 06:50
Vielen Dank für Dein Feedback.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 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