| 
| 
 | Вопрос # 234/ вопрос открыт / | 
 |  Уважаемые эксперты!Подскажите пожалуйста, можно ли в программе отслеживать моменты подключения и отключения устройств flash-памяти?
 
|  |   Вопрос задал: Sunshine (статус: Посетитель)Вопрос отправлен: 2 января 2007, 10:04
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Knjazev Здравствуйте, Sunshine!Можно. Для этого требуется отлавливать сообщение системы WM_DEVICECHANGE. См. приложение, на всякий случай шлю демо-проект, сделан в D7, компильни его, запусти и попробуй вставить-удалить flash-drive
 Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics,  Controls, Forms, Dialogs, StdCtrls, DBT; type  TForm1 = class(TForm)    lbDevice: TListBox;  private     procedure WMDEVICECHANGE(var Msg : TWMDeviceChange); message WM_DEVICECHANGE;  public  end; var  Form1: TForm1; implementation {$R *.dfm}  procedure TForm1.WMDEVICECHANGE(var Msg: TWMDeviceChange);var  lpdb  : PDevBroadcastHdr;  lpdbv : PDevBroadcastVolume;  lpdbpr: PDevBroadCastPort;  S : String;begin  lpdb := PDevBroadcastHdr(Msg.dwData);     Case Msg.Event of       If lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin    lpdbpr:= PDevBroadCastPort(Msg.dwData);    End;     If lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then begin    lpdbv := PDevBroadcastVolume(Msg.dwData);    End;  End;        If lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin    lpdbpr:= PDevBroadCastPort(Msg.dwData);    End;     If lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then begin    lpdbv := PDevBroadcastVolume(Msg.dwData);    End;  End; End; end; end.
|  | Ответ отправил: Knjazev (статус: 3-ий класс)Время отправки: 2 января 2007, 12:13
 Оценка за ответ: 5
 Комментарий к оценке: Спасибо! Как раз то, что нужно. |  
 Мини-форум вопросаВсего сообщений: 10; последнее сообщение — 16 января 2007, 19:04; участников в обсуждении: 3. 
|   | Knjazev (статус: 3-ий класс), 2 января 2007, 12:17 [#1]:Вот демо-проект: (файл удалён) |  
|   | SMaks (статус: 1-ый класс), 13 января 2007, 04:11 [#2]:А что за модуль DBT используется в проекте? |  
|   | Knjazev (статус: 3-ий класс), 13 января 2007, 11:29 [#3]:Уважаемый SMaks, нажмите Ctrl, подведите мышь на DBT и сделайте левый клик |  
|   | SMaks (статус: 1-ый класс), 14 января 2007, 16:24 [#4]:У меня этого модуля нету, вот поэтому и спрашиваю! |  
|   | Knjazev (статус: 3-ий класс), 14 января 2007, 17:50 [#5]:У всех есть, а у тебя нету? Сочувствую. |  
|   | Knjazev (статус: 3-ий класс), 14 января 2007, 17:51 [#6]:Да мыло, я вышлю |  
|   | Sunshine (статус: Посетитель), 14 января 2007, 18:06 [#7]:Это модуль из JediVCL. ..\JediVCL\JVCL\Common\DBT.pas
 |  
|   | Knjazev (статус: 3-ий класс), 14 января 2007, 20:50 [#8]:Sunshine - да, верно. Но разве я этот модуль вместе с демо-проектом не заливал? Он в папке программы д. б. См. мой первый пост, на всякий случай ещё разок - (файл удалён) |  
|   | SMaks (статус: 1-ый класс), 15 января 2007, 22:13 [#9]:Спасибо! |  
|   | Knjazev (статус: 3-ий класс), 16 января 2007, 19:04 [#10]:Всегда пожалуйста |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |