Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
CD-ROM [11]
DLL и PlugIns [75]
Help файлы [20]
INI файлы [16]
RS232 [2]
Активные директории [1]
Директории [0]
Диски [0]
Корзина [5]
Порты [26]
Ресурсы [0]
Файлы [0]
Форматы файлов [15]
Ярлыки [0]

Наш опрос
Какие компоненты добавлять больше?
Всего ответов: 48

Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0

Форма входа

Главная » Статьи » Файловая система » CD-ROM

Обработать момент вставки и вытаскивания CD
{ 
 Some applications need to know when the user inserts or 
 removes a compact disc or DVD from a CD-ROM drive without 
 polling for media changes. Windows provide a way to notify these 
 applications through the WM_DEVICECHANGE message. 
}

 type
 TForm1 = class(TForm)
 private
 procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
 public

 end;

 {...}

 implementation

 {$R *.DFM}

 procedure TForm1.WMDeviceChange(var Msg: TMessage);
 const
 DBT_DEVICEARRIVAL = $8000; // system detected a new device 
 DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone 
var
 myMsg: string;
 begin
 inherited;
 case Msg.wParam of
 DBT_DEVICEARRIVAL: myMsg := 'CD inserted!';
 DBT_DEVICEREMOVECOMPLETE: myMsg := 'CD removed!';
 end;
 ShowMessage(myMsg);
 end;


 {*********************************************}

 // Advanced Code: 
// When the device is of type volume, then we can get some device specific 
// information, namely specific information about a logical volume. 
// by Juergen Kantz 

unit Unit1;

 interface

 uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

 type
 TForm1 = class(TForm)
 Button1: TButton;
 label1: TLabel;
 private
 procedure WMDeviceChange(var Msg: TMessage); message WM_DeviceChange;
 { Private declarations }
 public
 { Public declarations }
 end;

 const
 DBT_DeviceArrival = $8000;
 DBT_DeviceRemoveComplete = $8004;
 DBTF_Media = $0001;
 DBT_DevTyp_Volume = $0002;

 type
 PDevBroadcastHdr = ^TDevBroadcastHdr;
 TDevBroadcastHdr = packed record
 dbcd_size: DWORD;
 dbcd_devicetype: DWORD;
 dbcd_reserved: DWORD;
 end;

 type
 PDevBroadcastVolume = ^TDevBroadcastVolume;
 TDevBroadcastVolume = packed record
 dbcv_size: DWORD;
 dbcv_devicetype: DWORD;
 dbcv_reserved: DWORD;
 dbcv_unitmask: DWORD;
 dbcv_flags: Word;
 end;

 var
 Form1: TForm1;


 implementation

 {$R *.dfm}


 function GetDrive(pDBVol: PDevBroadcastVolume): string;
 var
 i: Byte;
 Maske: DWORD;
 begin
 if (pDBVol^.dbcv_flags and DBTF_Media) = DBTF_Media then
 begin
 Maske := pDBVol^.dbcv_unitmask;
 for i := 0 to 25 do
 begin
 if (Maske and 1) = 1 then
 Result := Char(i + Ord('A')) + ':';
 Maske := Maske shr 1;
 end;
 end;
 end;

 procedure TForm1.WMDeviceChange(var Msg: TMessage);
 var
 Drive: string;
 begin
 case Msg.wParam of
 DBT_DeviceArrival:
 if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = DBT_DevTyp_Volume then
 begin
 Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
 label1.Caption := 'CD inserted in Drive ' + Drive;
 end;
 DBT_DeviceRemoveComplete:
 if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = DBT_DevTyp_Volume then
 begin
 Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
 label1.Caption := 'CD removed from Drive ' + Drive;
 end;
 end;
 end;


 end.
Категория: CD-ROM | Добавил: Angel (06.07.2008)
Просмотров: 417 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2025 Хостинг от uCoz