Пробовал вот так:
- Код: Выделить всё
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; - если удалось открыть - порт есть, возникла исключительная синуация - нет.
Но это не лучший вариант. Можно-ли как-то решить эту задачу "не через одно место"?