Ами ако става въпрос за логическите портове, можеш да ги тестваш със следната функция:
function TestCOMPort(Number: byte): boolean;
var PortName: string;
Handle: THandle;
begin
Result:=false;
if (Number<1) or (Number>255) then
exit;
PortName:='COM'+inttostr(Number);
Handle:=createfile(PChar(PortName), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, 0, 0);
if Handle=INVALID_HANDLE_VALUE then // Missing port
exit
else
closehandle(Handle);
Result:=true;
end;
Ако те интересува само броя, можеш да го изведеш по следния начин:
var C: byte = 0;
I: byte;
begin
for I:=1 to 255 do
if TestCOMPort(I) then
inc(C)
end;
Ако се интересуваш от истинските, физически COM портове (без разни
емулации, като USB->COM, Bluetooth и подобни), става малко по-сложно и
трябва да минеш на по-ниско ниво. Това са SetupAPI функциите (тези, които
оперират с DeviceManager) - можеш да ги погледнеш в MSDN.
Mixy