Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

отследить открытие/закрыте CD-ROM   Найти похожие ветки 

 
KILLMAN ©   (2005-01-16 15:11) [0]

Здравствуйте.
Подскажите, пожалуйста, как реализовать сабж!


 
uny ©   (2005-01-16 15:32) [1]

когда происходит открытие, то такая полочка выезжает с тихим жужжанием. а когда закрытие, то полочка заезжает обратно


 
KILLMAN ©   (2005-01-16 19:34) [2]

программно, плиз


 
dimaxx ©   (2005-01-16 21:17) [3]

Отлавливать WM_DEVICECHANGE


 
Colonel   (2005-01-17 14:32) [4]

Попробуй так :

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;


 
Colonel   (2005-01-17 14:34) [5]

Ну или так, как тебе писали :

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.


 
remb   (2005-01-17 17:50) [6]

Все это работает если на лотке сд привода есть диск.


 
aus   (2005-01-17 22:25) [7]

remb   (17.01.05 17:50) [6]
Все это работает если на лотке сд привода есть диск.

и включен автозапуск CD-ROM


 
uny ©   (2005-01-19 18:36) [8]

[6]
[7]
а мой способ работает всегда! можно завидовать))



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.05 c
14-1108263884
Думкин
2005-02-13 06:04
2005.03.06
С Днем рождения! 13 февраля


14-1108422869
Инк
2005-02-15 02:14
2005.03.06
Winows MUST DIE !!!


1-1108986773
lehich
2005-02-21 14:52
2005.03.06
повторы в ListBox и сохранение элементов в переменную


9-1102404567
Opanas
2004-12-07 10:29
2005.03.06
[GLScene] & 3DS


1-1108547754
Slonco
2005-02-16 12:55
2005.03.06
Как войти в режим редактирования?