MFC 사용 가능한 시리얼 포트 읽어오기MFC2015. 2. 15. 04:58
Table of Contents
반응형
노트북에 USB TO SERIAL을 이용해서 연결된 장비의 경우 시리얼포트가 고정되어 있지 않을 경우도 있고.. 고정되더라도 COM1이 아니라 엉뚱한 숫자로 매번 접속할 때 마다 장비에서 사용하는 포트를 변경해가며 접속하는게 번거로워서 사용가능한 시리얼 포트 정보를 가져오는 방법을 찾아봤습니다.
http://stackoverflow.com/questions/1388871/how-do-i-get-a-list-of-available-serial-ports-in-win32 에 시리얼 포트 정보를 얻어 올 수 있는 방법들을 나열해놓았는데 그 중에서 레지스터 값을 읽어오는 방법으로 결정하고 방법을 찾았습니다.
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=887656&ref=887655 에 원하는 레지스터 키로부터 값들을 읽어오는 방법을 찾았는데.. 다행히 시리얼 포트를 읽어오는 것을 알려주는 내용이라 찾는 수고를 덜었네요.. 해보니 잘됩니다.. 콤보박스를 드롭다운할때에 아래 함수를 호출하여 목록을 업데이트 하는 것만 추가해주니 잘 작동합니다.
시간 나는대로 다른 레지스터 값들도 읽어와봐야 겠습니다..
- //콤보박스가 Dropdown될 때 호출하면 됨.
- void CSerialDlg::getSerialPort()
- {
- //http://stackoverflow.com/questions/1388871/how-do-i-get-a-list-of-available-serial-ports-in-win32
- //HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM 에 시리얼포트 번호들이 등록되어 있음.
- //
- //레지스터 읽어오면 됨. 코드는 아래 링크에서 가져옴
- //http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=887656&ref=887655
- HKEY hKey;
- //https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms724895(v=vs.85).aspx
- //오픈할 레지스터 키에 대한 기본키 이름
- //오픈할 레지스터 서브키 이름
- //레지스터키에 대한 핸들
- RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), &hKey);
- TCHAR szData[20], szName[100];
- DWORD index = 0, dwSize=100, dwSize2 = 20, dwType = REG_SZ;
- serialPort.ResetContent();
- memset(szData, 0x00, sizeof(szData));
- memset(szName, 0x00, sizeof(szName));
- //https://msdn.microsoft.com/en-us/library/windows/desktop/ms724865(v=vs.85).aspx
- //hKey - 레지스터키 핸들
- //index - 값을 가져올 인덱스.. 다수의 값이 있을 경우 필요
- //szName - 항목값이 저장될 배열
- //dwSize - 배열의 크기
- while (ERROR_SUCCESS == RegEnumValue(hKey, index, szName, &dwSize, NULL, NULL, NULL, NULL))
- {
- index++;
- //https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx
- //szName-레지터스터 항목의 이름
- //dwType-항목의 타입, 여기에서는 널로 끝나는 문자열
- //szData-항목값이 저장될 배열
- //dwSize2-배열의 크기
- RegQueryValueEx(hKey, szName, NULL, &dwType, (LPBYTE)szData, &dwSize2);
- serialPort.AddString(CString(szData));
- memset(szData, 0x00, sizeof(szData));
- memset(szName, 0x00, sizeof(szName));
- dwSize = 100;
- dwSize2 = 20;
- }
- RegCloseKey(hKey);
- }
반응형
'MFC' 카테고리의 다른 글
64비트 컴퓨터에 설치된 Visual Studio 2015로 32비트용 실행파일 컴파일하기 (5) | 2015.09.05 |
---|---|
OLE DB를 이용해 MSSQL DB사용하는 예제 소스 코드 (0) | 2015.09.03 |
64비트 컴퓨터에 설치된 Visual Studio 2013으로 32비트용 실행파일 컴파일하기 (0) | 2015.09.03 |
Visual Studio 2013용 멀티바이트 MFC 라이브러리 (0) | 2015.08.26 |
MFC 다이얼로그 박스에 추가한 메뉴에 아이콘 넣기 (0) | 2014.09.28 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!