Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2009, 12:58   #1
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию Узнать путь USB устройства

В чем собственно проблема.
Не получается получить путь устройства. Делаю так:
Код:
  LoadSetupApi;
  LoadConfigManagerApi;
  Memo1.Clear;

  PnPHandle:=SetupDiGetClassDevs(@USB_CLASS_GUID, nil, 0,DIGCF_PRESENT);
  if Cardinal(PnPHandle) = INVALID_HANDLE_VALUE then  Exit;

  Devn := 0;
  repeat
   DevData.cbSize := SizeOf(DevData);
   RES := SetupDiEnumDeviceInfo(PnPHandle, Devn, DevData);
   if (RES) and (_DN<>DN_ROOT_ENUMERATED) then
    begin
      St:=GetDeviceName(PnPHandle, DevData);

      if St='AVR309:USB to UART protocol converter' then begin //здесь из списка устройств по имени нахожу нужное мне устройство

        DeviceInterfaceDetailData:=nil;
        RequiredSize:=nil;
        new(RequiredSize);

//   А вот здесь пытаюсь получить путь устройства

         if(SetupDiGetInterfaceDeviceDetail(PnPHandle,         
                              @DevData,
                                                nil,
                                  0,
                                     RequiredSize,
                                           nil))then begin

          new(DeviceInterfaceDetailData);
          DeviceInterfaceDetailData^.cbSize:=SizeOf(DeviceInterfaceDetailData^);

          SetupDiGetInterfaceDeviceDetail(PnPHandle,
                              @DevData,
                              DeviceInterfaceDetailData,
                                  RequiredSize^,
                                     nil,
                                           nil);
          Memo1.Lines.Add('OK');
// В мемо выводит всегда длину , равную 1          

Memo1.Lines.Add(IntToStr(Length(DeviceInterfaceDetailData^.DevicePath)));
         end;
      end;
     Inc(Devn);
    end;
  until not RES;
  SetupDiDestroyDeviceInfoList(PnPHandle);
  UnloadSetupApi;
  UnloadConfigManagerApi;
Предполагаю, что неправильно использую функцию SetupDiGetInterfaceDeviceDetail.
Может кто то работал с данной функцией?
dimonbest вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать полный путь к процессу в Vista abyss_by Win Api 3 26.03.2010 11:47
USB устройства KREGI Компоненты Delphi 11 29.06.2009 23:39
Разработка драйвер USB-HID устройства _dx Win Api 5 10.06.2009 18:34
USB устройства. Ky3Heu, Win Api 1 04.05.2009 21:06
как узнать с какого устройства идет ввод данных keg Win Api 5 20.07.2007 10:50