Buka tutup CDROM dengan Delphi

Berikut ini adalah cara untuk mengontrol eject/load CDROM yang berawal dari pertanyaan salah satu member di milis Delphindo

Bisa tidak kita mengontrol CD Room dengan coding delphi, misal buka dan menutup CD Room dng hanya menekan tombol buka dan tutup.

{
Description:
prosedur ini digunakan untuk mengontrol CDROM untuk
melakukan eject/load secara otomatis melalui aplikasi.

parameter:
ADrive: Char – Drive lokasi CDROM
AEject: boolean – Action yang akan dilakukan terhadap CDROM
yang dispesifikasikan sebelumnya
TRUE: Eject
FALSE: Load
Author: Jaimy
}
procedure EjectLoadCD(const ADrive: char;
const AEject: boolean);
const
FILE_DEVICE_MASS_STORAGE = $2D;
METHOD_BUFFERED = 0;
FILE_ANY_ACCESS = 0;
FILE_READ_ACCESS = 1;
FILE_WRITE_ACCESS = 2;
IOCTL_STORAGE_EJECT_MEDIA = (FILE_DEVICE_MASS_STORAGE shl 16) OR
(FILE_READ_ACCESS shl 14) OR
($202 shl 2) OR
(METHOD_BUFFERED);
IOCTL_STORAGE_LOAD_MEDIA = (FILE_DEVICE_MASS_STORAGE shl 16) OR
(FILE_READ_ACCESS shl 14) OR
($203 shl 2) OR
(METHOD_BUFFERED);
var
AResult: DWORD;
ADrv: string;
AHnd: THandle;
begin
{
Keluaran GetDriveType:
0 – Unknown
1 – Unknown
2 – Floppy Disk
3 – Local Drive
4 – Network Drive
5 – CD-Rom
6 – RAM-Disk
}
ADrv := UpCase(ADrive)+’:’;
if (ADrive = ”) or
(GetDriveType(PChar(ADrv)) 5) then
raise Exception.Create(‘Drive yang dimasukkan tidak dikenal ‘+
‘(bukan CDROM Drive)’);
AHnd := CreateFile(PChar(‘\\.\’+ADrv), GENERIC_READ, 0, nil,
OPEN_EXISTING, 0, 0);

if (AHnd = INVALID_HANDLE_VALUE) then
RaiseLastOSError
else
try
case AEject of
True:
if not DeviceIoControl(AHnd, IOCTL_STORAGE_EJECT_MEDIA, nil, 0,
nil, 0, AResult, nil) then
RaiseLastOSError;
False:
if not DeviceIoControl(AHnd, IOCTL_STORAGE_LOAD_MEDIA, nil, 0,
nil, 0, AResult, nil) then
RaiseLastOSError;
end;
finally
CloseHandle(AHnd);
end;
end;

Semoga bisa membantu.🙂

Sumbernya !!!


About this entry