Enumerar una lista de sistemas de puertos COM en Delphi
-
03-07-2019 - |
Pregunta
Objetivo: Me gustaría poder listar los puertos COM disponibles en un sistema en Delphi.
Tarea:
He leído este subproceso SO en la enumeración del LPT puertos de un sistema que usa el registro. También descubrí que los puertos COM están listados en el registro en HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM
pero encontré una gesticulación sin respuesta en mismo hilo que esto podría no ser confiable en diferentes máquinas y diferentes versiones de Windows.
También encontré artículos que hacen referencia al uso de QueryDosDevice () pero al intentar esto código de ejemplo , encontré que no parecía enumerar ningún puerto COM en absoluto.
Pregunta: ¿Cuál es la forma más confiable (a través de versiones desconocidas de Windows) para enumerar los puertos COM en una máquina con Windows?
Solución
DEVICEMAP \ SERIALCOMM es bueno para todas las versiones de NT. Probablemente deba buscar en DYN_DATA para Win9x.
Utilice este método si necesita fiabilidad en tiempo de ejecución.
Otros consejos
Por favor, vaya a través de la URL que está escrita en C ++
http://www.codeproject.com/KB/system/serial_portsenum_fifo.aspx
y se puede implementar el mismo enfoque en Delphi también ... o alguien puede convertir para ti en SO ..
Esto funcionará para todas las versiones de Windows ya que funciona desde el principio del administrador de dispositivos que está disponible para todas las versiones de ventana.
Este es el código para LINUX no para WINDOWS ....
function GetSerialPortNames: string;
var
Index: Integer;
Data: string;
TmpPorts: String;
sr : TSearchRec;
begin
try
TmpPorts := '';
if FindFirst('/dev/ttyS*', $FFFFFFFF, sr) = 0 then
begin
repeat
if (sr.Attr and $FFFFFFFF) = Sr.Attr then
begin
data := sr.Name;
index := length(data);
while (index > 1) and (data[index] <> '/') do
index := index - 1;
TmpPorts := TmpPorts + ' ' + copy(data, 1, index + 1);
end;
until FindNext(sr) <> 0;
end;
FindClose(sr);
finally
Result:=TmpPorts;
end;
end;