문제

목적: 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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top