델파이의 시스템 목록을 열거합니다
-
03-07-2019 - |
문제
목적: Delphi의 시스템에 사용 가능한 COM 포트를 나열하고 싶습니다.
숙제:내가 읽고 이것 따라서 레지스트리를 사용하여 시스템의 LPT 포트를 열거하는 스레드. 또한 COM 포트가 레지스트리에 나열되어 있음을 발견했습니다. HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
그러나 대답하지 않은 gestionulation을 발견했습니다 같은 스레드 이것은 다른 기계와 다른 버전의 Windows에서 신뢰할 수 없을 수 있습니다.
또한 QueryDosDevice ()의 사용을 참조하는 기사를 찾았지만 시도했을 때 이 샘플 코드, 나는 그것이 COM 포트를 전혀 나열하지 않는 것으로 보인다.
의문: Windows 시스템에 COM 포트를 나열하는 가장 안정적인 방법 (알 수없는 Windows 버전에서)은 무엇입니까?
해결책
Devicemap SerialComm 모든 NT 버전에 좋습니다. win9x의 경우 dyn_data 아래를 살펴 봐야 할 것입니다.
사용 이 방법 런타임 안정성이 필요한 경우.
다른 팁
C ++로 작성된 URL을 살펴보십시오.
http://www.codeproject.com/kb/system/serial_portsenum_fifo.aspx
델파이에서도 같은 접근법을 구현할 수 있습니다.
이는 모든 Window 버전에 사용할 수있는 장치 관리자의 원칙에서 작동하기 때문에 모든 Windows 버전에 대해 작동합니다.
이것은 Windows가 아닌 Linux의 코드입니다 ....
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;