|
Вопрос # 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]:
Всегда пожалуйста
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|