개발 정보/델파이

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

RoRoBong 2020. 11. 26. 16:34
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
반응형