Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2007, 23:20   #1
alex23xandr
 
Регистрация: 17.05.2007
Сообщений: 6
По умолчанию Перехватить подключение USB Flash Drive

Подскажите пожалуйста как программно перехватить подключение USB носителя информации,а потом уже в ручную разрешать или нет прописываться ему в системе (реестре) ???
alex23xandr вне форума Ответить с цитированием
Старый 05.12.2007, 00:05   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Скачиваем мой справочник
http://www.programmersclub.ru/files/dfaq.rar
вводим в строку поиска "usb" и получаем ответы...
mihali4 вне форума Ответить с цитированием
Старый 26.05.2009, 13:13   #3
Vladimir-belikov
Пользователь
 
Аватар для Vladimir-belikov
 
Регистрация: 13.05.2009
Сообщений: 14
По умолчанию

Это при переходе по твоей ссылке:
Объяснение: При попытке доступа к этой странице произошла ошибка, страницу отобразить невозможно.
Vladimir-belikov вне форума Ответить с цитированием
Старый 26.05.2009, 14:00   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Это из-за апгрейдов на форуме...
Цитата:
Определить - подключено ли USB устройство ?

autor: miguel lucero
homepage: www.lsis.com.ar

// component to detect when usb devices are connected or disconnected
// using registerdevicenotification

unit u_usb;

interface

uses
windows, messages, sysutils, classes, forms;

type

pdevbroadcasthdr = ^dev_broadcast_hdr;
dev_broadcast_hdr = packed record
dbch_size: dword;
dbch_devicetype: dword;
dbch_reserved: dword;
end;

pdevbroadcastdeviceinterface = ^dev_broadcast_deviceinterface;
dev_broadcast_deviceinterface = record
dbcc_size: dword;
dbcc_devicetype: dword;
dbcc_reserved: dword;
dbcc_classguid: tguid;
dbcc_name: short;
end;

const
guid_devinterface_usb_device: tguid = '{a5dcbf10-6530-11d2-901f-00c04fb951ed}';
dbt_devicearrival = $8000; // system detected a new device
dbt_deviceremovecomplete = $8004; // device is gone
dbt_devtyp_deviceinterface = $00000005; // device interface class

type

tcomponentusb = class(tcomponent)
private
fwindowhandle: hwnd;
fonusbarrival: tnotifyevent;
fonusbremove: tnotifyevent;
procedure wndproc(var msg: tmessage);
function usbregister: boolean;
protected
procedure wmdevicechange(var msg: tmessage); dynamic;
public
constructor create(aowner: tcomponent); override;
destructor destroy; override;
published
property onusbarrival: tnotifyevent read fonusbarrival write fonusbarrival;
property onusbremove: tnotifyevent read fonusbremove write fonusbremove;
end;

implementation

constructor tcomponentusb.create(aowner: tcomponent);
begin
inherited create(aowner);
fwindowhandle := allocatehwnd(wndproc);
usbregister;
end;

destructor tcomponentusb.destroy;
begin
deallocatehwnd(fwindowhandle);
inherited destroy;
end;

procedure tcomponentusb.wndproc(var msg: tmessage);
begin
if (msg.msg = wm_devicechange) then
begin
try
wmdevicechange(msg);
except
application.handleexception(self);
end;
end
else
msg.result := defwindowproc(fwindowhandle, msg.msg, msg.wparam, msg.lparam);
end;

procedure tcomponentusb.wmdevicechange(var msg: tmessage);
var
devtype: integer;
datos: pdevbroadcasthdr;
begin
if (msg.wparam = dbt_devicearrival) or (msg.wparam = dbt_deviceremovecomplete) then
begin
datos := pdevbroadcasthdr(msg.lparam);
devtype := datos^.dbch_devicetype;
if devtype = dbt_devtyp_deviceinterface then
begin // usb device
if msg.wparam = dbt_devicearrival then
begin
if assigned(fonusbarrival) then
fonusbarrival(self);
end
else
begin
if assigned(fonusbremove) then
fonusbremove(self);
end;

function tcomponentusb.usbregister: boolean;
var
dbi: dev_broadcast_deviceinterface;
size: integer;
r: pointer;
begin
result := false;
size := sizeof(dev_broadcast_deviceinterfac e);
zeromemory(@dbi, size);
dbi.dbcc_size := size;
dbi.dbcc_devicetype := dbt_devtyp_deviceinterface;
dbi.dbcc_reserved := 0;
dbi.dbcc_classguid := guid_devinterface_usb_device;
dbi.dbcc_name := 0;

r := registerdevicenotification(fwindowh andle, @dbi,
device_notify_window_handle
);
if assigned(r) then result := true;
end;

end.

Последний раз редактировалось mihali4; 26.05.2009 в 17:40.
mihali4 вне форума Ответить с цитированием
Старый 26.05.2009, 17:04   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

тоже самое только с разъяснениями написано здесь
rpy3uH вне форума Ответить с цитированием
Старый 26.05.2009, 17:45   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
тоже самое только с разъяснениями написано здесь
Совершенно верно. Главная трудность - заставить пользоваться тем богатством, которое накоплено и выложено в материалах клуба.
По идее, добрая половина задаваемых вопросов раскрыта не только на форуме, но и на сайте клуба. Как это ни прискорбно, многие о существовании сайта и не подозревают...
Где-то мы что-то упустили.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехватить сообщение об ошибке Insainer Общие вопросы Delphi 5 25.04.2008 20:39
Поставить на новый компьютер старый Hard Drive Kopy3 Компьютерное железо 5 22.04.2008 15:30
По очереди отвалились локальные диски на SATA Hard Drive Alar Компьютерное железо 8 19.04.2008 00:15
Как перехватить обращения к принтеру? Classic Win Api 2 16.08.2007 11:07
как перехватить открытие чужого приложенияпытаюсь перехватить открытие любого приложе rpy3uH Win Api 2 02.12.2006 12:12