Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 07.12.2009, 22:36   #1
54rus
Пользователь
 
Регистрация: 21.07.2009
Сообщений: 41
По умолчанию Как отследить появление нового диска?

Доброго всем времени суток. Возник вопрос:
Как отследить появление нового диска в системе (Съёмного носителя или виртуального диска) на дэльфи.
54rus вне форума Ответить с цитированием
Старый 08.12.2009, 10:48   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

отслеживайте сообщение WM_DeviceChange и будет вам счастье.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 11:27   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,305
По умолчанию

В смысле нового диска в приводе или нового привода с диском?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.12.2009, 11:30   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

обрабатываем событие WM_DEVICECHANGE. в private части описания формы вставляем код вида
Код:
procedure WMDEVICECHANGE(var msg:TMessage); message WM_DEVICECHANGE;
.....
procedure TForm1.WMDeviceChange(var Msg: TMessage); 
begin 
if (Msg.wParam = DBT_DEVICEARRIVAL) then showmessage('устройство добавлено');
if (Msg.wParam = DBT_DEVICEREMOVECOMPLETE) then ShowMessage('удалено');
end;
SERG1980 вне форума Ответить с цитированием
Старый 08.12.2009, 19:09   #5
54rus
Пользователь
 
Регистрация: 21.07.2009
Сообщений: 41
По умолчанию

прикольно, спасибо. вроде всё понял. а букву диска как узнать?
54rus вне форума Ответить с цитированием
Старый 08.12.2009, 20:04   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

сие делается так...
Код:
function GetDrive(pDBVol: PDevBroadcastVolume): string;
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 tf.WndProc(var Msg: TMessage); // перехват события USB-
begin
 if msg.WParam = DBT_DEVICEARRIVAL then
  if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = DBT_DevTyp_Volume then
 messagebox(handle,pchar(GetDrive(PDevBroadcastVolume(Msg. lParam))),'',0);
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 20:23   #7
54rus
Пользователь
 
Регистрация: 21.07.2009
Сообщений: 41
По умолчанию

raxp спасибо
Я так понял эта процедура работает только с USB дисками а как мне отследить появление нового виртуального диска и узнать его букву.
54rus вне форума Ответить с цитированием
Старый 08.12.2009, 20:30   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

уберите проверку
Код:
if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = DBT_DevTyp_Volume
и будет отслеживать все диски
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 20:39   #9
54rus
Пользователь
 
Регистрация: 21.07.2009
Сообщений: 41
По умолчанию

raxp очень огромное спасибо. сейчас буду пробывать

Ни чего не получается. (вроде раньше руки из нужного места росли). можно подробнее.

Последний раз редактировалось Stilet; 10.12.2009 в 15:34.
54rus вне форума Ответить с цитированием
Старый 10.12.2009, 15:51   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

можно и подробнее... (расширение поменяйте на dpr)
(для пробы, виртуальный можете смонтировать так - subst Z: /с)
Вложения
Тип файла: txt change_disk.txt (2.8 Кб, 176 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать медленное появление текста в программе? BARS1991 C++ Builder 12 15.11.2009 16:07
Как привязать появление формы к активной ячейке? solely-unique Microsoft Office Excel 1 29.03.2009 00:36
Как отследить нажатие кнопки? Bezdar Microsoft Office Excel 9 17.12.2008 12:12
Как правильно перехватывать появление новых строк на листе? neugadal Microsoft Office Excel 2 03.10.2008 11:01
Как отследить отпускание клавиши? Zefick Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.05.2008 19:14


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS