본문 바로가기

Software/Docs

[SERIAL] 시리얼포트 자동으로 읽기

시리얼포트 자동으로 읽기(레지스트리 방법)

몇가지 방법이 있을수 있는데 간단한 방법으로는 레지스트리의 값을 이용하셔서 레지스트리의 내용의 COM 포트들의 리스트를 확인하는 방법이 있습니다.

해당 레지스트리 값의 위치는 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM 으로 이곳에 등록된 레지스트리 값을 직접 살펴보시면

\Device\Serial0 ... 식으로 나열되어 있는 값들에 시리얼 포트 COM1 .. 등의 데이터 값이 보관되어 있으니 레지스트리를 직접 이용한 방법을 사용하신다거나

아니면 정확한 방법은 COM 포트를 직접 오픈시켜서 성공 실패를 확인해보는 방법이 있습니다.


좋은 하루 되세요...


레지스트리 값을 통한 COM PORT 얻어오기 간단한 예)


    CString m_strComPort;


    HKEY hKey;

    LONG Result;

    LPCTSTR lpszSubKey="HARDWARE\\DEVICEMAP\\SERIALCOMM";


    char lpValue[10];

    DWORD dwType, dwByte;

   

    Result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpszSubKey,0,KEY_ALL_ACCESS,&hKey);


    if(Result == ERROR_SUCCESS)

    {

        int i = 0;

        while (!Result)

        {

            CString strSubKey;

            strSubKey.Format("\\device\\serial%d", i);


            Result = RegQueryValueEx(hKey, strSubKey, NULL, &dwType, (unsigned char*)lpValue, &dwByte);

            if( Result == ERROR_SUCCESS )

            {

                m_strComPort = lpValue;

                AfxMessageBox(m_strComPort);

            }

            else

            {

                m_strComPort = "";

            }

            i++;

        }

    }

    RegCloseKey(hKey);

출처 : Tong - 포포포님의 Visual C++통