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;