[Delphi] 델파이 시리얼 포트 확인하기

    728x90

    안녕하세요

    로로봉입니다 : )

    아래와 같이 장치관리자에 포트로 나타나는 시리얼 포트를 확인하는 방법을 알아보겠습니다.

    [ 그림 1 : 장치 관리자 화면 ]

    Windows 키 + R 을 눌러 실행 창을 열어 레지스트리 편집기(regedit)를 실행해줍니다.

    [ 그림 2 : 실행창 ]

    HKEY_LOCAL_MACHINE > HARDWARE > DEVICEMAP > SERIALCOMM 을 선택하면 다음과 같이 현재 잡혀있는 시리얼 포트를 확인 할 수 있습니다.

    [ 그림 3 : 레지스트리 편집기 화면 ]


    델파이에서는 윈도우 레지스트리를 접근할 수 있도록 TRegistry 클래스를 지원합니다.

    다음과 같이 Registry Pas 파일과 Windows Pas 파일을 Use 해준 뒤 TRegistry 클래스를 사용하면 됩니다.

    Windows Pas 파일의 경우 레지스트리 키 값인 HKEY_LOCAL_MACHINE 변수를 사용하기 위해 Use 해주어야 합니다.

    uses
    
      Registry, Windows;

    다음 함수를 이용해 현재 잡혀있는 시리얼 포트 명칭을 스트링리스트로 받아올 수 있습니다.

    function SearchComport:TStringList;
    var
      regTmp : TRegistry;
      stTmp : TStringList;
      iLoop : Integer;
    begin
      regTmp := TRegistry.Create;
      stTmp := TStringList.Create;
      Result := TStringList.Create;
      try
        regTmp.RootKey := HKEY_LOCAL_MACHINE;
        regTmp.OpenKey('HARDWARE\DEVICEMAP\SERIALCOMM', False);
        regTmp.GetValueNames(stTmp);
    
        for iLoop := 0 to stTmp.Count-1 do
          Result.Add(regTmp.ReadString(stTmp.Strings[iLoop]));
      finally
        regTmp.CloseKey;
        regTmp.Free;
        stTmp.Free;
      end;
    end;

    윈도우에서 레지스트리를 접근하기 위해서는 프로그램의 관리자 권한이 설정되어야 합니다.

    디버깅 시 GetVlueNames에 반환 값이 없는 것은 디버깅은 관리자 권한으로 실행되지 않기 때문입니다.

    컴파일 후 프로그램을 실행할 때 관리자 권한으로 실행하면 정상적으로 레지스트리에 표시된 COM6이 반환되는 것을 볼 수 있습니다.

     

    좋아요♥ + 구독 부탁드립니다 : )

    728x90
    반응형

    댓글