Текущий архив: 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