Пробовал вот так:
- Код: Выделить всё
- procedure TForm1.Button7Click(Sender: TObject);
 var
 S: String;
 n: integer;
 begin
 ComboBox1.Clear;
 for n:=1 to 30 do begin
 S:='COM'+IntToStr(n);
 LazSerial3.SynSer.Connect(S);
 if LazSerial3.SynSer.Handle <> THandle(-1) then begin
 LazSerial3.SynSer.CloseSocket;
 ComboBox1.Items.Add(S);
 end;
 end;
 ComboBox1.Text:='Поиск завершён';
 end;
Проверял в Windows-е - находит все не занятые порты. В Ubuntu находит все 30, хотя реально есть COM1 и COM2 и на момент проверки специально через них вёл обмен.
Можно, конечно, последовательно через LazSerial1.Open; - LazSerial1.Close; - если удалось открыть - порт есть, возникла исключительная синуация - нет.
Но это не лучший вариант. Можно-ли как-то решить эту задачу "не через одно место"?



