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