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

Вниз

Перехватить подключение USB-flash   Найти похожие ветки 

 
NeoOrc   (2006-12-02 17:28) [0]

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

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

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


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

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.


 
Kolan ©   (2006-12-02 18:35) [2]

А что такое DBT?


 
Kolan ©   (2006-12-02 18:43) [3]

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


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

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


 
Kolan ©   (2006-12-02 18:56) [5]

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


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

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


 
Dmitrij_K   (2006-12-02 20:18) [7]

Спасибо Агурову
http://www.bookroom.ru/book.php?autid=5659&PHPSESSID=cfe69b7cad7c514fb315b0cbea7e


 
Kolan ©   (2006-12-02 20:37) [8]

> Спасибо Агурову

Намыль если есть электронное...


 
Kolan ©   (2006-12-02 20:42) [9]

Извените за поспешность, сам нашел.


 
Kolan ©   (2006-12-05 20:02) [10]

> Dmitrij_K   (02.12.06 20:18)

Каюсь книгу почти не читал, но вопрос по [1]

Структура куда попадает имя порта выглядит так:
 DEV_BROADCAST_PORT_A = packed record
   dbcp_size: DWORD;
   dbcp_devicetype: DWORD;
   dbcp_reserved: DWORD;
   dbcp_name: array[0..0] of AnsiChar;
 end;


Почемуже там массив всего 1 элемент? Изменил на 4 элемента.

И еще WideCharToString возвращает ???? хотя в имени  правильно лежит "C","O","M","7"


 
Kolan ©   (2006-12-05 20:20) [11]

И вообще насколько коду можно доверять?


 
chose ©   (2006-12-05 21:17) [12]

> [11] Kolan ©   (05.12.06 20:20)
>И вообще насколько коду можно доверять?
Пиши сам и будешь доверять коду, как самому себе :)


 
Kolan ©   (2006-12-05 21:40) [13]

> Пиши сам и будешь доверять коду, как самому себе :)

Дык была бы такая штука чтобы книжки в голову запихивать...


 
Орион ©   (2006-12-05 22:02) [14]

> [13] Kolan ©   (05.12.06 21:40)
> Дык была бы такая штука чтобы книжки в голову запихивать...

а еще я в нее ем :))


 
Kolan ©   (2006-12-05 22:18) [15]

> [14] Орион ©   (05.12.06 22:02)
> > [13] Kolan ©   (05.12.06 21:40)
> > Дык была бы такая штука чтобы книжки в голову запихивать...
>
> а еще я в нее ем :))

Кушаю я как раз тем куда запихивать. А вот чем.... :)


 
Vga ©   (2006-12-06 07:53) [16]

> [10] Kolan ©   (05.12.06 20:02)

Судя по виду - типичное объявление статического массива неизвестного размера. Примерный аналог сишного *char. Катит только если отключить проверку выхода за пределы массива.

> И еще WideCharToString возвращает ???? хотя в имени  правильно
> лежит "C","O","M","7"

А почему WideCharToString, если массив AnsiChar? И лежит в нем ANSI, судя по тому, что ты привел? В уникоде должно быть "C"#0"O"#0"M"#0"7"#0.


 
Kolan ©   (2006-12-06 08:40) [17]

> А почему WideCharToString, если массив AnsiChar?

Вот я о том же. Отсюда и [11]...

ЗЫ
 А как перевести в string? :)


 
Vga ©   (2006-12-06 14:02) [18]

> [17] Kolan ©   (06.12.06 08:40)

StrPas


 
Kolan ©   (2006-12-07 12:30) [19]

> Vga ©  

Благодарствую.

Dmitrij_K
События подклю чения и удаления устройства(вирт ком прот) получилось отработать.

А как узнать что устройство подключено.
Те устр-во подключили, запустили программу и программа должна определить подкючено устр-во или нет.


 
Орион ©   (2006-12-07 15:12) [20]

> [19] Kolan ©   (07.12.06 12:30)

просканировать список устройств?


 
Kolan ©   (2006-12-07 17:39) [21]

> просканировать список устройств?

Как енто сделать?


 
Орион ©   (2006-12-07 17:42) [22]

> [21] Kolan ©   (07.12.06 17:39)

не сталкивался, но возможно WMI прдоставляет такую информацию?


 
Kolan ©   (2006-12-07 17:47) [23]

> информацию?

Ты меня не спрашивай, я сам незнаю. :)


 
Орион ©   (2006-12-07 17:51) [24]

> [23] Kolan ©   (07.12.06 17:47)

это намек :)


 
Орион ©   (2006-12-07 17:57) [25]

http://www.script-coding.info/WMI_HardWare.html
может поможет.


 
Kolan ©   (2006-12-07 18:23) [26]

> может поможет.

Пасиба, правда VB меня пугает :) особенно вот это:

For Each objPnP In objService.ExecQuery("SELECT * FROM Win32_PnPEntity")
SQL Какой то...



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

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

Наверх




Память: 0.53 MB
Время: 0.02 c
15-1176060159
Суслик
2007-04-08 23:22
2007.05.06
Дайте модуль grids.pas от д7 или д6


3-1171348665
xKL
2007-02-13 09:37
2007.05.06
Как выловить клик мыши на DBGrid?


8-1156137008
hero
2006-08-21 09:10
2007.05.06
Радио в stream


5-1153210679
DevilDevil
2006-07-18 12:17
2007.05.06
Как отследить изменение размера TCustomControl компонента?


15-1176086186
Slider007
2007-04-09 06:36
2007.05.06
С днем рождения ! 7 апреля