Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перехватить подключение USB-flash [D7]


Страницы:   1 2

NeoOrc ©   (2006-12-02 17:28:00) 

Приветствую мастеров!

Такие вопросы:
1. Как можно перехватить подключение USB flash?
2. Как можно определить, что это именно flash, а не, скажем, usb-мышь?

Заранее спасибо за ответы :)


NeoOrc   (2006-12-02 19:50:00) [21]

2Dmitrij_K: пасиба огромное! То, что нужно :)


Kolan   (2006-12-02 18:56:00) [22]

Благодарствую мил человек. :) Давно искал. (Мне как раз для портов надо).


Dmitrij_K   (2006-12-02 18:45:00) [23]

Вот весь проект
http://slil.ru/23504670


Kolan   (2006-12-02 18:43:00) [24]

И где его взять для Delphi? (Так понял что это переделаннай DBT.h)


Kolan   (2006-12-02 18:35:00) [25]

А что такое DBT?


Dmitrij_K   (2006-12-02 18:00:00) [26]

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   lbDevice: TListBox;
 private
   // обработчик сообщения WM_DEVICECHANGE
   procedure WMDEVICECHANGE(var Msg : TWMDeviceChange); message WM_DEVICECHANGE;

   // получение имени диска
   function GetDiskName(unitmask : Longint) : string;
 public
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{обработчик сообщения WM_DEVICECHANGE}
procedure TForm1.WMDEVICECHANGE(var Msg: TWMDeviceChange);
var
 lpdb  : PDevBroadcastHdr;
 lpdbv : PDevBroadcastVolume;
 lpdbpr: PDevBroadCastPort;
begin
{Заголовок сообщения}
lpdb := PDevBroadcastHdr(Msg.dwData);

{Отображаем код события}
lbDevice.Items.Add('Обнаружено событие. Код:'+IntToHex(Msg.Event, 4));

Case Msg.Event of
 DBT_DEVICEARRIVAL: begin {Добавление}
  lbDevice.Items.Add('>Добавлено устройство. Код:'+IntToHex(lpdb^.dbch_devicetype, 4));

  { Новое устройство - порт (последовательный или параллельный) }
  If lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin
   lpdbpr:= PDevBroadCastPort(Msg.dwData);
   lbDevice.Items.Add('>>Добавлен порт. Имя:'+WideCharToString(@lpdbpr.dbcp_name));
  End;

  { Новое устройство - логический диск }
  If lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then begin
   lpdbv := PDevBroadcastVolume(Msg.dwData);
   lbDevice.Items.Add('>>Добавлен логический диск. Имя: '+GetDiskName(lpdbv.dbcv_unitmask));
  End;
 End;

 DBT_DEVICEREMOVECOMPLETE: begin {Удаление}
  lbDevice.Items.Add('>Удалено устройство. Код: '+IntToHex(lpdb^.dbch_devicetype, 4));

  { Удаленное устройство - порт (последовательный или параллельный) }
  If lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin
   lpdbpr:= PDevBroadCastPort(Msg.dwData);
   lbDevice.Items.Add('>>Удален порт. Имя: '+WideCharToString(@lpdbpr.dbcp_name));
  End;

  { Удаленное устройство - логический диск }
  If lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then begin
   lpdbv := PDevBroadcastVolume(Msg.dwData);
   lbDevice.Items.Add('>>Удален логический диск. Имя: '+GetDiskName(lpdbv.dbcv_unitmask));
  End;
 End;
End;

end;

// Маска имени диска. Возвращаемое значение состоит из битов,
// соответствующих именам дисков:
// бит 0=A, бит 1=B, бит 3=C и т.д.
function TForm1.GetDiskName(unitmask : Longint) : string;
var i : Integer;
begin
For i:= 0 to 26 do begin
 if ((unitmask and 1) <> 0) then Break;
 unitmask:= unitmask shr 1;
End;
Result:= Char(Integer('A')+i);
end;

end.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо