Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

Как найти USB устройство?   Найти похожие ветки 

 
Kolan ©   (2006-09-22 22:21) [0]

Здравствуйте,
 Есть устройство, которое подключается через USB, но определяется системой как COM порт. (Например: Serial USB COM6)
Вопрос можно ли как-нибудь найти это устройство? Т.е. определить на какой COM порт оно стало?


 
Rouse_ ©   (2006-09-24 17:08) [1]

Через SetupAPI пробовал?


 
Ketmar ©   (2006-09-24 17:17) [2]

маленький оффтоп: давно уже интересно, почему setup API заведует столь многим, что в сетапе нафиг не надо? %-)


 
Орион ©   (2006-09-24 17:33) [3]

> [2] Ketmar ©   (24.09.06 17:17)

что бы UNsetup API не делать :)))
сорь за оффтоп.


 
Kolan ©   (2006-09-24 21:28) [4]


> Rouse_ ©   (24.09.06 17:08) [1]

Нет. Почитаю... Благодарю.


 
Kolan ©   (2006-09-24 21:31) [5]


> Через SetupAPI пробовал?
>

А более точный намек? Там много всего...


 
Kolan ©   (2006-10-05 13:16) [6]


> Через SetupAPI пробовал?
>

Так куда смотреть в спраке по Setup API?


 
Rouse_ ©   (2006-10-05 15:26) [7]

вот так вытащить список устройств:

const
 DIGCF_ALLCLASSES=$00000004;
 DIGCF_PRESENT=$00000002;
 DIGCF_PROFILE=$00000008;
 DIGCF_DEVICEINTERFACE=$00000010;
 SPDRP_DEVICEDESC=$00000000;

type
 SP_DEVINFO_DATA=record
  cbSize:DWord;
  ClassGuid:TGuid;
  DevInst:DWord;    // DEVINST handle
  Reserved:LongInt;
 end;

 PSP_DEVINFO_DATA = ^SP_DEVINFO_DATA;
 PGuid = ^TGuid;
 H_DEV = Pointer;

function SetupDiCreateDeviceInfoList(ClassGuid:PGuid;
hwndParent:cardinal):Pointer; stdcall; external "setupapi.dll";
function SetupDiGetClassDevsExA(ClassGuid:PGuid; Enumerator:PChar;
hwndParent:cardinal; Flags:DWord; DeviceInfoSet:Pointer;
MachineName:PChar; Reserved:DWord):Pointer; stdcall; external "setupapi.dll";
function SetupDiGetClassDevsA(ClassGuid:PGuid; Enumerator:PChar;
hwndParent:cardinal; Flags:DWord):Pointer; stdcall; external "setupapi.dll";
function SetupDiGetDeviceRegistryPropertyA(DeviceInfoSet:Pointer;
DeviceInfoData:PSP_DEVINFO_DATA; Property_:DWord; PropertyRegDataType:Pointer;
PropertyBuffer:Pointer; PropertyBufferSize:cardinal; RequiredSize:Pointer):longbool;
stdcall; external "setupapi.dll";
function SetupDiEnumDeviceInfo(DeviceInfoSet:Pointer; MemberIndex:DWord;
var DeviceInfoData:SP_DEVINFO_DATA):longbool; stdcall; external "setupapi.dll";
function SetupDiDestroyDeviceInfoList(DeviceInfoSet:Pointer):longbool; stdcall;
external "setupapi.dll";

function GetDevices: String;
var
 dwRequired: DWORD;
 hAllDevices: H_DEV;
 dwInfo: DWORD;
 Data: SP_DEVINFO_DATA;
 Buff: array [0..99] of Char;
begin
 Result := "";
 DWORD(hAllDevices) := INVALID_HANDLE_VALUE;
 try
   hAllDevices := SetupDiGetClassDevsA(nil, nil, 0,
     DIGCF_PRESENT or DIGCF_ALLCLASSES);
   if DWORD(hAllDevices) <> INVALID_HANDLE_VALUE then
   begin
     FillChar(Data, SizeOf(SP_DEVINFO_DATA), 0);
     Data.cbSize := SizeOf(SP_DEVINFO_DATA);
     dwInfo := 0;
     if SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) then
     begin
       Result := "";
       while SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) do
       begin
         dwRequired := 0;
         FillChar(Buff[0], 100, #0);
         if SetupDiGetDeviceRegistryPropertyA(hAllDevices, @Data,
           SPDRP_DEVICEDESC, nil, @Buff[0], 100, @dwRequired) then
             Result := Result + (String(Buff));
         Inc(dwInfo);
       end;
     end;
   end;
   {$I crypt_end.inc}
 finally
   if DWORD(hAllDevices) <> INVALID_HANDLE_VALUE then
     SetupDiDestroyDeviceInfoList(hAllDevices);
 end;
end;


Вот так получить список только определенного типа:

procedure TForm1.Button2Click(Sender: TObject);
var
 dwRequired: DWORD;
 hDev, hAllDevices: H_DEV;
 dwInfo: DWORD;
 Data: SP_DEVINFO_DATA;
 Buff: array [0..99] of Char;
 Guid: TGUID;
begin
 Guid := StringToGUID("{C29CC2E3-BC48-4B74-9043-2C6413FFA784}");
 hDev := SetupDiCreateDeviceInfoList(@Guid, 0);
 if DWORD(hDev) <> INVALID_HANDLE_VALUE then
 try
   hAllDevices :=  SetupDiGetClassDevsExA(nil, nil, 0,
     DIGCF_PRESENT or DIGCF_ALLCLASSES, hDev, nil, 0);
   if DWORD(hAllDevices) <> INVALID_HANDLE_VALUE then
   try
     FillChar(Data, SizeOf(SP_DEVINFO_DATA), 0);
     Data.cbSize := SizeOf(SP_DEVINFO_DATA);
     dwInfo := 0;
     if SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) then
     begin
       while SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) do
       begin
         dwRequired := 0;
         FillChar(Buff[0], 100, #0);
         if SetupDiGetDeviceRegistryPropertyA(hAllDevices, @Data,
           SPDRP_DEVICEDESC, nil, @Buff[0], 100, @dwRequired) then
           Memo1.Lines.Add(String(Buff));
         Inc(dwInfo);
       end;
     end;
   finally
     SetupDiDestroyDeviceInfoList(hAllDevices);
   end;
 finally
   SetupDiDestroyDeviceInfoList(hDev);
 end;
end;


 
Kolan ©   (2006-10-05 22:55) [8]

Ух. Буду разбирать...


 
Kolan ©   (2006-10-14 18:24) [9]

if SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) then
не сбывается. Устр-во подключено

Кстати а если я знаю что у меня FTDI?Может можно через их драйвер.

SetupDiEnumDeviceInfo
В хелпе от BDS2006 такого нет:( хотя Setup Api имеется...


 
Kolan ©   (2006-10-14 18:33) [10]


> В хелпе от BDS2006 такого нет:( хотя Setup Api имеется..
> .
>

Тьфу есть же MSDN.com :)
Но вопрос остался почему не сбывается...


 
Kolan ©   (2006-10-14 18:37) [11]

Забыл сказать.
GetLastError говорит: Дополнительные данные отсутствуют


 
Kolan ©   (2006-10-16 12:42) [12]

Удалено модератором
Примечание: Создание пустых сообщений


 
brother ©   (2006-10-17 07:00) [13]

данное подключение шибко напоминает подключение сотового...


 
Kolan ©   (2006-10-17 11:40) [14]

Удалено модератором
Примечание: Создание пустых сообщений



Страницы: 1 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
2-1170596520
Max.66RUS
2007-02-04 16:42
2007.02.25
Как присвоить к .ЕХЕ файлу иконку...?


2-1170765318
фыфвфы
2007-02-06 15:35
2007.02.25
свойства папки


4-1161004753
Джо
2006-10-16 17:19
2007.02.25
GetClipboardData(CF_BITMAP) и GlobalLock


15-1170333812
xayam
2007-02-01 15:43
2007.02.25
Authorware 7


1-1167904951
Kolan
2007-01-04 13:02
2007.02.25
Иключения в потоке. Как правильно обрабатывать?