Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отловить подключение съемного носителя, Флешки, CD/DVD и пр. 
:(
    Опции темы
WolfAlone
Дата 25.1.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Здравствуйте! Собственно сабж! Интересует вопрос, как отловить событие подключение CD/DVD, "флэшек" и пр. съемных носителей к системе на Windows XP/Vista.

P.S. Аналогичные действия проводит антивирус Касперского, при вставке "флэшки" - появляется окно, с надписью типа "Обнаружен съёмный диск"


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
WolfAlone
Дата 25.1.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Перелопатил гору информации, но так и нигде не нашёл внятного объяснения что к чему... Вариант исходника на 1000+ строк кода, без комментариев, который ещё к тому же и не компилируется - меня в корне не устроил! Подскажите пожалуйста, кто знает толковую информацию по этому поводу, в которой было бы всё подробно расписано!


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
kami
Дата 25.1.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Имхо, начать надо с этого: RegisterDeviceNotification
Вполне возможно, уже есть готовые компоненты/классы...
PM MAIL WWW   Вверх
WolfAlone
Дата 25.1.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Может быть кто-нибудь обладает уже готовым модулем для перехвата события подключения "флэшки" в ПК? (USB)


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
WolfAlone
Дата 25.1.2010, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Почитал про "RegisterDeviceNotification", почитал про "WM_DEVICECHANGE"... Скажите пожалуйста, может кто-нибудь встречал подробное описание этих функций на русском языке?


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
transserg
Дата 25.1.2010, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



WolfAlone в аттаче проект с примером в мемо выводи букву подключенного диска=)

Присоединённый файл ( Кол-во скачиваний: 138 )
Присоединённый файл  __________________.7z 3,01 Kb
PM MAIL   Вверх
WolfAlone
Дата 25.1.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Уважаемый transserg, спасибо огромное! Получил именно то, что нужно. Реагирует даже на воткнутые диски, это очень хорошо!

Теперь остался последний вопрос, по поводу того, как бы почитать внятную документацию на родном языке что куда и к чему в этом исходнике  smile ...


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
transserg
Дата 25.1.2010, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



WolfAlone все где я это иска это DRKB и MSDN+Translate.google.ru а вообще в сообщении WM_DEVICECHANGE

WParam это константа например DBT_DEVICEARRIVAL что говорит о том что было подключено новое устройство а в lParam содержится указатель на сруктуру в нашем случае это DEV_BROADCAST_VOLUME 
Код

typedef struct _DEV_BROADCAST_VOLUME {
  DWORD dbcv_size; // РАзмер структуры 
  DWORD dbcv_devicetype; // Тип устройства 
  DWORD dbcv_reserved; // зарезервированный параметр
  DWORD dbcv_unitmask; // маска устройства первый бит биск А второй бит диск В третий бит Диск С и так далее
  WORD  dbcv_flags; // как я понял показывает какой диск сетевой или локальный подключили
} DEV_BROADCAST_VOLUME, *PDEV_BROADCAST_VOLUME;


PM MAIL   Вверх
kami
Дата 26.1.2010, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Цитата(WolfAlone @  25.1.2010,  18:06 Найти цитируемый пост)
почитать внятную документацию на родном языке

Я прошу прощения за  smile , но родной язык для программиста под Windows - тот, на котором написан MSDN (native).  smile 
PM MAIL WWW   Вверх
Keeper89
Дата 26.1.2010, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 14
Всего: 58



Я уже сам когда-то заводил эту тему smile


--------------------
PM MAIL WWW   Вверх
~FoX~
Дата 26.1.2010, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



WM_DEVICE_CHANGE, дома есть рабочий пример, есле еще будет актуально скину код в тему поле 18.00 по московскому времени 


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
WolfAlone
Дата 26.1.2010, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Уважаемый ~FoX~ буду признателен за любые примеры и помощь. Можно в принципе по мимо дельфи примеры на С++, не суть smile


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
~FoX~
Дата 26.1.2010, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



Вот, как и обещал, рабочий код, ловит все и флешки и сд и даже подключение сетевого драйва...
Код

//...............
 private
     procedure WMDeviceChange(var Msg: TMessage); message WM_DeviceChange;
//...............
const
   DBT_DeviceArrival = $8000;
   DBT_DeviceRemoveComplete = $8004;

type
   PDevBroadcastVolume = ^TDevBroadcastVolume; //Если честно не помню точно, но помоему эта структура описана не полностью...
   TDevBroadcastVolume = packed record
     dbcv_size: DWORD;
     dbcv_devicetype: DWORD;
     dbcv_reserved: DWORD;
     dbcv_unitmask: DWORD;
     dbcv_flags: Word;
   end;
   function GetDrive(pDBVol: PDevBroadcastVolume): string;

//...............
function GetDrive(pDBVol: PDevBroadcastVolume): string; //Получаем букву драйва из структуры PDevBroadcastVolume
var
  i: Byte;
  Maske: DWORD;
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;


procedure TForm1.WMDeviceChange(var Msg: TMessage); //собственно ловим инсерт/еджект драйвов
var
  Drive: string;
begin
  Application.ProcessMessages;
  if Msg.wParam = DBT_DeviceArrival then begin //если засунули
    Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
     ShowMessage(Drive);
  end
  else if  Msg.wParam = DBT_DeviceRemoveComplete then begin //если выдернули
    Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
    ShowMessage(Drive);
  end;
end;



Это сообщение отредактировал(а) ~FoX~ - 26.1.2010, 18:04


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
WolfAlone
Дата 26.1.2010, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Спасибо всем огромное! Разобрался чуть по чуть, задно подтянул знания WinAPI.

Как выяснилось, в константах со значениями типа "$8000" в принципе нет необходимости, это скорее удобство. А в С++ как оказалось, даже есть заголовочный файл со всеми этими константами...  smile 

Осталось ещё чуть покумекать, глядишь ещё чуть поумнею  smile 


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
~FoX~
Дата 26.1.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



Цитата(WolfAlone @  26.1.2010,  19:22 Найти цитируемый пост)
Как выяснилось, в константах со значениями типа "$8000" в принципе нет необходимости

В принципе во всех константах нету необходимости  smile  smile  


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1161 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.