Enumerazione di un elenco di porte Com di sistemi in Delphi
-
03-07-2019 - |
Domanda
Obiettivo: Vorrei poter elencare le porte COM disponibili su un sistema in Delphi.
Homework:
Ho letto questo thread SO sull'enumerazione di LPT porte di un sistema che utilizza il registro. Ho anche scoperto che le porte COM sono elencate nel registro in HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM
ma ho trovato gesticolazione senza risposta nella stesso thread che ciò potrebbe non essere affidabile su macchine diverse e versioni diverse di Windows.
Ho anche trovato articoli che fanno riferimento all'uso di QueryDosDevice () ma provando questo codice di esempio , ho scoperto che non sembrava elencare alcuna porta COM.
Domanda: qual è il modo più affidabile (tra versioni Windows sconosciute) per elencare le porte COM su un computer Windows?
Soluzione
DEVICEMAP \ SERIALCOMM è buono per tutte le versioni NT. Probabilmente dovrai cercare sotto DYN_DATA per Win9x.
Usa questo metodo se hai bisogno di affidabilità di runtime.
Altri suggerimenti
Ti preghiamo di consultare l'URL scritto in C ++
http://www.codeproject.com/KB/system/serial_portsenum_fifo.aspx
e lo stesso approccio può essere implementato anche in delphi .. o qualcuno può convertirti per te in SO ..
Funzionerà con tutte le versioni di Windows poiché funziona secondo il principio di Gestione dispositivi disponibile per tutte le versioni di Windows.
Questo è il codice per LINUX non per 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;