CD- oder DVD-Laufwerk
Liste der Anhänge anzeigen (Anzahl: 2)
Ü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:
Die MediaInfo ist auskommentiert, da sie nicht benötigt wird.
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 Funktion:
Delphi-Quellcode:
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.
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; |
AW: CD- oder DVD-Laufwerk
Hi,
Ich wollte mein Feedback abgeben zu dem Programm. Das Programm hat meine 2 DVD Laufwerke richtig erkannt. Super :thumb: |
AW: CD- oder DVD-Laufwerk
Vielen Dank für Dein Feedback. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 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