Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Обработать момент вставки и вытаскивания CD

Delphi , Файловая система , CD-ROM

Обработать момент вставки и вытаскивания CD

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  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.

Программный пример на языке Delphi, демонстрирующий способ обнаружения и уведомления пользователя о том, когда в приводе CD-ROM вставлен или извлечен диск CD/DVD.

Обзор кода:

  1. В первой части определена класс TForm (TForm1), содержащий приватный метод WMDeviceChange, который обрабатывает сообщение WM_DEVICECHANGE.
  2. В разделе реализации есть два случая:
    • DBT_DEVICEARRIVAL: происходит, когда новый устройство обнаружено (например, вставлен диск CD/DVD). Код устанавливает переменную myMsg в значение 'CD inserted!' и отображает ее с помощью функции ShowMessage.
    • DBT_DEVICEREMOVECOMPLETE: происходит, когда устройство извлекается (например, диск CD/DVD вынимается). Код устанавливает переменную myMsg в значение 'CD removed!' и отображает ее с помощью функции ShowMessage.
  3. Вторая часть кода предоставляет болееadvanced функциональность. Она определяет два типа: PDevBroadcastHdr и TDevBroadcastVolume. Эти типы используются для доступа к информации о устройстве, которое.triggered сообщение WM_DEVICECHANGE.
  4. Функция GetDrive принимает указатель на запись TDevBroadcastVolume в качестве аргумента и возвращает строку, представляющую букву привода CD/DVD, который был вставлен или извлечен. Это делается путем проверки поля dbcv_flags записи на наличие флага DBTF_MEDIA, который указывает, что устройство является объемом (например, диск CD/DVD). Если этот флаг установлен, функция извлекает букву привода из поля dbcv_unitmask.
  5. Метод WMDeviceChange был изменен для использования этих advanced функций. Когда происходит событие изменения устройства, он проверяет, является ли устройство объемом, используя запись PDevBroadcastHdr. Если это так, он вызывает функцию GetDrive, чтобы извлечь букву привода, и обновляет метку на форме с результатом.

В целом, этот код предоставляет способ для приложений Delphi обнаруживать и уведомлять пользователя о том, когда в приводе CD-ROM вставлен или извлечен диск CD/DVD, а также болееadvanced функциональность для получения информации о устройстве, которое.triggered событие.

Обработка момента вставки и вытаскивания CD с помощью WM_DEVICECHANGE сообщения для уведомления приложений о изменениях в состояние CD-устройства.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: CD-ROM ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-06-02 10:20:12
2024-06-14 04:53:54/0.0073478221893311/2