Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 234

/ вопрос открыт /

Уважаемые эксперты!
Подскажите пожалуйста, можно ли в программе отслеживать моменты подключения и отключения устройств flash-памяти?

Sunshine Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Sunshine (статус: Посетитель)
Вопрос отправлен: 2 января 2007, 10:04
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Knjazev

Здравствуйте, Sunshine!
Можно. Для этого требуется отлавливать сообщение системы WM_DEVICECHANGE. См. приложение, на всякий случай шлю демо-проект, сделан в D7, компильни его, запусти и попробуй вставить-удалить flash-drive

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics,
  7. Controls, Forms, Dialogs, StdCtrls, DBT;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. lbDevice: TListBox;
  12. private
  13.  
  14. procedure WMDEVICECHANGE(var Msg : TWMDeviceChange); message WM_DEVICECHANGE;
  15. public
  16. end;
  17.  
  18. var
  19. Form1: TForm1;
  20.  
  21. implementation
  22.  
  23. {$R *.dfm}
  24.  
  25.  
  26. procedure TForm1.WMDEVICECHANGE(var Msg: TWMDeviceChange);
  27. var
  28. lpdb : PDevBroadcastHdr;
  29. lpdbv : PDevBroadcastVolume;
  30. lpdbpr: PDevBroadCastPort;
  31. S : String;
  32. begin
  33.  
  34. lpdb := PDevBroadcastHdr(Msg.dwData);
  35.  
  36.  
  37.  
  38.  
  39. Case Msg.Event of
  40.  
  41.  
  42.  
  43.  
  44. If lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin
  45. lpdbpr:= PDevBroadCastPort(Msg.dwData);
  46.  
  47. End;
  48.  
  49.  
  50. If lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then begin
  51. lpdbv := PDevBroadcastVolume(Msg.dwData);
  52.  
  53. End;
  54. End;
  55.  
  56.  
  57.  
  58.  
  59.  
  60. If lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin
  61. lpdbpr:= PDevBroadCastPort(Msg.dwData);
  62.  
  63. End;
  64.  
  65.  
  66. If lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then begin
  67. lpdbv := PDevBroadcastVolume(Msg.dwData);
  68.  
  69. End;
  70. End;
  71. End;
  72.  
  73. end;
  74.  
  75. end.


Ответ отправил: Knjazev (статус: 3-ий класс)
Время отправки: 2 января 2007, 12:13
Оценка за ответ: 5

Комментарий к оценке: Спасибо! Как раз то, что нужно.

Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 16 января 2007, 19:04; участников в обсуждении: 3.
Knjazev

Knjazev (статус: 3-ий класс), 2 января 2007, 12:17 [#1]:

Вот демо-проект: (файл удалён)
SMaks

SMaks (статус: 1-ый класс), 13 января 2007, 04:11 [#2]:

А что за модуль DBT используется в проекте?
Knjazev

Knjazev (статус: 3-ий класс), 13 января 2007, 11:29 [#3]:

Уважаемый SMaks, нажмите Ctrl, подведите мышь на DBT и сделайте левый клик
SMaks

SMaks (статус: 1-ый класс), 14 января 2007, 16:24 [#4]:

У меня этого модуля нету, вот поэтому и спрашиваю!
Knjazev

Knjazev (статус: 3-ий класс), 14 января 2007, 17:50 [#5]:

У всех есть, а у тебя нету? Сочувствую.
Knjazev

Knjazev (статус: 3-ий класс), 14 января 2007, 17:51 [#6]:

Да мыло, я вышлю
Sunshine

Sunshine (статус: Посетитель), 14 января 2007, 18:06 [#7]:

Это модуль из JediVCL.
..\JediVCL\JVCL\Common\DBT.pas
Knjazev

Knjazev (статус: 3-ий класс), 14 января 2007, 20:50 [#8]:

Sunshine - да, верно. Но разве я этот модуль вместе с демо-проектом не заливал? Он в папке программы д. б. См. мой первый пост, на всякий случай ещё разок - (файл удалён)
SMaks

SMaks (статус: 1-ый класс), 15 января 2007, 22:13 [#9]:

Спасибо!
Knjazev

Knjazev (статус: 3-ий класс), 16 января 2007, 19:04 [#10]:

Всегда пожалуйста

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:55
Выполнено за 0.02 сек.