Enumiando uma lista de portas de sistemas com Delphi
-
03-07-2019 - |
Pergunta
Objetivo: Eu gostaria de poder listar as portas COM disponíveis em um sistema em Delphi.
Trabalho de casa:eu li isto Portanto, encaixe a enumeração das portas LPT de um sistema usando o registro. Eu também descobri que as portas COM estão listadas no registro em HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
mas encontrou gesticulação sem resposta no Mesmo tópico que isso pode não ser confiável em diferentes máquinas e versões diferentes do Windows.
Eu também encontrei artigos referentes ao uso de querydosdevice (), mas ao tentar este código de amostra, Descobri que não parecia listar nenhuma porta COM.
Pergunta: Qual é a maneira mais confiável (nas versões desconhecidas do Windows) para listar as portas COM em uma máquina Windows?
Solução
Devicemap SerialComm é bom para todas as versões do NT. Você provavelmente precisará procurar em dyn_data para win9x.
Usar este método Se você precisar de confiabilidade de tempo de execução.
Outras dicas
Por favor, passe pela URL, que está escrita em C ++
http://www.codeproject.com/kb/system/serial_portsenum_fifo.aspx
e a mesma abordagem pode ser implementada em Delphi também .. ou alguém pode se converter para você em SO ..
Isso funcionará para todas as versões do Windows, pois isso funciona a partir do princípio do Gerenciador de dispositivos, disponível para todas as versões da janela.
Este é o código para Linux não para o 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;