ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
148650 Топик полностью
FDA (20.02.2009 09:50, просмотров: 625) ответил il-2 на Про Bluetooth virtual COM Port. Вопрос мой скорее для программеров PC, более подходящего топика я не нашел. Можно ли как-нибудь определить, что данный СОМ-порт относится не к физическим портам, не виртуальный USB, а именно Bluetooth? В диспетчере
Изучайте API функцию EnumPorts. Он возвращает список всех портов в системе (COM, LPT) и при этом также выдаёт их описания, типа USB Serial Port и т.п. Очень удобная функция, а под Vista и просто необходимая, т.к. обычный метод построения списка COM-портов по принципу "попытаться открыть" там занимает очень много времени (в сравнении с XP). Ниже привожу пример получения списка всех COM-портов системы, но без описаний: class function TCOMport.COMPortsList (ports : TStrings) : Boolean; var i : Integer; f : Boolean; BytesNeeded : DWORD; Returned : DWORD; p : Pointer; info : PPortInfo2; s : string; begin Result := FALSE; f := EnumPorts(nil, 2, nil, 0, BytesNeeded, Returned); if not f and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin GetMem(p,BytesNeeded); try EnumPorts(nil, 2, p, BytesNeeded, BytesNeeded, Returned); for i := 0 to Returned - 1 do begin info := PPortInfo2(DWORD(p) + i * SizeOf(TPortInfo2)); s := info^.pPortName; if Copy(s,1,3) = 'COM' then ports.Add(Copy(s,1,Length(s) - 1)); end; Result := TRUE; finally FreeMem(p); end; end; end;