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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 655

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

Здравствуйте, уважаемые эксперты!
Подскажите, как программно определить, какое именно устройство было подключено к ПК. (Как отследить сам факт подключения нового устройства я разобралась.)

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

Вопрос задала: Катерина (статус: Посетитель)
Вопрос отправлен: 22 июня 2007, 13:19
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Градов Ю.М.

Здравствуйте, Митюшина Екатерина Александровна!
Хорошо, Вы знаете, как определить факт установки нового оборудования. Теперь последовательно определяете, что это за оборудование, пример для звуковой карты ниже: (и т.д.)

Приложение:
  1. begin
  2. ShellExecute(Application.Handle,
  3. PChar('Open'),
  4. PChar('C:WindowsRundll32.exe'),
  5. PChar('Shell32.dll,SHFormatDrive'),
  6. PChar('C:Windows'),
  7. SW_SHOWNORMAL);
  8. end;


Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 22 июня 2007, 14:48


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

Всего сообщений: 17; последнее сообщение — 23 июня 2007, 13:28; участников в обсуждении: 4.
Dron

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

Dron (статус: Студент), 22 июня 2007, 16:48 [#6]:

Не знаю. Как минимум ОС должна быть установлена на C:\, согласно данному коду.
А на самом деле должно появиться окно форматирования диска (которое через Проводник можно вызвать).

Кстати, перебирать все устройства - это странно. Устройств можно насчитать несколько десятков - и что? Под все отдельный подход? Не уверен, есть ли способ лучше, т.е. более общий способ, но он должен быть.
С уважением.
Градов Ю.М.

Градов Ю.М. (статус: 8-ой класс), 22 июня 2007, 17:17 [#7]:

SHFormatDrive - заметил, но не придал значения, даже не подумал, что относится форматированию, а подумал - к формату вывода сообщения. Ну, в общем, лохонулся. Всем спасибо. Не буду верить на слово, теперь даже уважаемым источникам.
Катерина

Катерина (статус: Посетитель), 22 июня 2007, 18:14 [#8]:

В любом случае всем спасибо)))) Наверное нужно каким-то образом поработать с дескриптиорами устройства... Постараюсь подойти к проблемме с этой стороны...Народ, если кому что в голову придет, пожалуйста поделитесь...
Dron

Dron (статус: Студент), 22 июня 2007, 19:12 [#9]:

Кстати, а каким способом вы отслеживаете момент подключения устройства?
С уважением.
Катерина

Катерина (статус: Посетитель), 22 июня 2007, 21:43 [#10]:

Просто перехватываю системное сообщение WM_DEVICECHANGE. Впринципе, у меня уже есть программа, которая выводит список всех устройств (ну или в зависсимоти от GUID класса). И в момент получения системного сообщения обновляет его, поэтому визуально посмотреть,какое устройство подключено можно. Но меня это не слишком устраивает...хочется чего-то более "красивого", потому и пытаюсь разобраться, как все это работает...
Dron

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

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

Dron (статус: Студент), 23 июня 2007, 13:28 [#17]:

Не знаю, но думаю, что нет. Обычно всё с помощью сообщений...
С уважением.

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

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