| 
| 
 | Вопрос # 655/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Подскажите, как программно определить, какое именно устройство было подключено к ПК. (Как отследить сам факт подключения нового устройства я разобралась.)
 
|  |   Вопрос задала: Катерина (статус: Посетитель)Вопрос отправлен: 22 июня 2007, 13:19
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Градов Ю.М. Здравствуйте, Митюшина Екатерина Александровна!Хорошо, Вы знаете, как определить факт установки нового оборудования. Теперь последовательно определяете, что это за оборудование, пример для звуковой карты ниже: (и т.д.)
 Приложение:Переключить в обычный режим begin  ShellExecute(Application.Handle,              PChar('Open'),              PChar('C:WindowsRundll32.exe'),              PChar('Shell32.dll,SHFormatDrive'),              PChar('C:Windows'),              SW_SHOWNORMAL); end;
|  | Ответ отправил: Градов Ю.М. (статус: 8-ой класс)Время отправки: 22 июня 2007, 14:48
 
 |  
 Мини-форум вопросаВсего сообщений: 17; последнее сообщение — 23 июня 2007, 13:28; участников в обсуждении: 4. 
|   | Dron (статус: Студент), 22 июня 2007, 16:08 [#1]:Градов Ю.М.: каким образом этот код относится к звуковой карте? Вы вообще видели, что предлагаете? С уважением. |  
|   | Градов Ю.М. (статус: 8-ой класс), 22 июня 2007, 16:29 [#2]:Пример взаимствован из DelphiWord из раздела ОС и железо>Аудиокарта и видеокарта>Проверить, установлена ли звуковая карта |  
|   | Градов Ю.М. (статус: 8-ой класс), 22 июня 2007, 16:34 [#3]:Извиняюсь, схватил не подумав. Просто не думал, что в DelphiWord могут быть такие ошибки. При программировании часто пользуюсь информацией из нее. Под железо никогда не писал программ, вот поэтому так вышло. |  
|   | Градов Ю.М. (статус: 8-ой класс), 22 июня 2007, 16:43 [#4]:to Dron Запустил этот фрагмент кода на своем ПК - никаких реакций - не скажете почему?
 |  
|   | Вадим К (статус: Академик), 22 июня 2007, 16:47 [#5]:to Градов Ю.М. Прокоментируйте пожалуйста вот эту строку с вашего ответа. "SHFormatDrive"
 Неуж незаметили?
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Dron (статус: Студент), 22 июня 2007, 16:48 [#6]:Не знаю. Как минимум ОС должна быть установлена на C:\, согласно данному коду. А на самом деле должно появиться окно форматирования диска (которое через Проводник можно вызвать).
 
 Кстати, перебирать все устройства - это странно. Устройств можно насчитать несколько десятков - и что? Под все отдельный подход? Не уверен, есть ли способ лучше, т.е. более общий способ, но он должен быть.
 С уважением. |  
|   | Градов Ю.М. (статус: 8-ой класс), 22 июня 2007, 17:17 [#7]:SHFormatDrive - заметил, но не придал значения, даже не подумал, что относится форматированию, а подумал - к формату вывода сообщения. Ну, в общем, лохонулся. Всем спасибо. Не буду верить на слово, теперь даже уважаемым источникам. |  
|   | Катерина (статус: Посетитель), 22 июня 2007, 18:14 [#8]:В любом случае всем спасибо)))) Наверное нужно каким-то образом поработать с дескриптиорами устройства... Постараюсь подойти к проблемме с этой стороны...Народ, если кому что в голову придет, пожалуйста поделитесь... |  
|   | Dron (статус: Студент), 22 июня 2007, 19:12 [#9]:Кстати, а каким способом вы отслеживаете момент подключения устройства? С уважением. |  
|   | Катерина (статус: Посетитель), 22 июня 2007, 21:43 [#10]:Просто перехватываю системное сообщение WM_DEVICECHANGE. Впринципе, у меня уже есть программа, которая выводит список всех устройств (ну или в зависсимоти от GUID класса). И в момент получения системного сообщения обновляет его, поэтому визуально посмотреть,какое устройство подключено можно. Но меня это не слишком устраивает...хочется чего-то более "красивого", потому и пытаюсь разобраться, как все это работает... |  
|   | Dron (статус: Студент), 22 июня 2007, 21:52 [#11]:Понятно. Как раз хотел предложить сравнивать список до и после подключения и находить устройство...  А может быть в параметрах этого сообщения (WM_DEVICECHANGE) есть какая-то информация, которую передаёт ОС? Или там одни нули? С уважением. |  
|   | Градов Ю.М. (статус: 8-ой класс), 22 июня 2007, 21:56 [#12]:Там же в DelphiWord есть: type
 TForm1 = class(TForm)
 Button1: TButton;
 private
 { Private declarations }
 procedure WMDeviceChange(var message: TMessage); message WM_DEVICECHANGE;
 public
 { Public declarations }
 end;
 
 var
 Form1: TForm1;
 
 implementation
 {$R *.DFM}
 
 const DBT_DEVICEARRIVAL = $8000;
 const DBT_DEVICEQUERYREMOVE = $8001;
 const DBT_DEVICEQUERYREMOVEFAILED = $8002;
 const DBT_DEVICEREMOVEPENDING = $8003;
 const DBT_DEVICEREMOVECOMPLETE = $8004;
 const DBT_DEVICETYPESPECIFIC = $8005;
 const DBT_CONFIGCHANGED = $0018;
 
 procedure TForm1.WMDeviceChange(var message: TMessage);
 var
 s : string;
 begin
 {Do Something here}
 case message.wParam of
 DBT_DEVICEARRIVAL :
 s := 'A device has been inserted and is now available';
 DBT_DEVICEQUERYREMOVE:
 begin
 s := 'Permission to remove a device is requested';
 ShowMessage(s);
 {True grants premission}
 message.Result := integer(true);
 exit;
 end;
 DBT_DEVICEQUERYREMOVEFAILED :
 s := 'Request to remove a device has been canceled';
 DBT_DEVICEREMOVEPENDING :
 s := 'Device is about to be removed';
 DBT_DEVICEREMOVECOMPLETE :
 s := 'Device has been removed';
 DBT_DEVICETYPESPECIFIC :
 s := 'Device-specific event';
 DBT_CONFIGCHANGED :
 s:= 'Current configuration has changed'
 else
 s := 'Unknown Device Message';
 end;
 ShowMessage(s);
 inherited;
 end;
 |  
|   | Dron (статус: Студент), 22 июня 2007, 22:00 [#13]:А, вот там что передаётся... Да, отсюда добраться до самого устройства не получится... P.S. Градов Ю.М.: DelphiWorLd.
 С уважением. |  
|   | Катерина (статус: Посетитель), 22 июня 2007, 22:11 [#14]:Может быть и есть, вот только мне, к сожалению, про то не известно =). Я так понимаю, единственное, что можно "взять" по средствам этого системного сообщения, это код события, в зависимости от которого можно определить, что подключено (диск, порт или что-то еще, но ничего конкретного). Но я могу ошибаться, потому что разбиралась, как все работает по коду без комментариев((((, а в Delphi я без году неделя.. |  
|   | Градов Ю.М. (статус: 8-ой класс), 22 июня 2007, 22:12 [#15]:to Dron За DelphiWorl спасибо!!!
 |  
|   | Катерина (статус: Посетитель), 22 июня 2007, 22:18 [#16]:А есть иной способ отследить подключение/отключение устройства ? |  
|   | Dron (статус: Студент), 23 июня 2007, 13:28 [#17]:Не знаю, но думаю, что нет. Обычно всё с помощью сообщений... С уважением. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |