C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[69669] Re:연결된 시리얼 포트 정보 얻기
망치 [mangchy] 7772 읽음    2013-06-18 18:44
#include 
#include 

//-------------------------------------------------------------------------------
//① 설       명  : COM포트가 사용가능한지 알아낸다.
//② 인       수  :
//③ 리       턴  :
//-------------------------------------------------------------------------------
bool __fastcall XXXXX::bValidateComPort(const TCHAR *comport)
{
    bool Result = false;
    HANDLE PortHandle; 

    PortHandle = CreateFile(comport, GENERIC_READ || GENERIC_WRITE, 0, NULL, 
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); 

    if(PortHandle != INVALID_HANDLE_VALUE) 
    { 
        Result = true; 
        CloseHandle(PortHandle); 
    }

    return Result;
} 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TStringList *FList = new TStringList;

TStringList *XXXXXX::GetList(bool SubName, bool OnlyAvail)
{
        bool bRet;

        auto_ptr reg(new TRegistry());
	auto_ptr Name(new TStringList());

	FList->Clear();

	reg->RootKey = HKEY_LOCAL_MACHINE;

	m_Ret = reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false);
	if (bRet == false) return NULL;

	reg->GetValueNames(Name.get());

	for (int i = 0; i < Name->Count; i++)
	{
		// \\device\\ 의 문자열을 "" 으로 변환
		TReplaceFlags flag = TReplaceFlags() << rfReplaceAll << rfIgnoreCase;
		String Value = StringReplace(Name->Strings[i], "\\device\\", "", flag);

		// TStringList 에서 values 사용이 가능하도록 변경 후 Add
		String Str;
        Str = reg->ReadString(Name->Strings[i]);
        if(OnlyAvail)//유효한 시리얼포트만 리턴한다
        {
            if(bValidateComPort(Str.w_str()))
			{
				if(SubName) Str = Str.Format("%s=%s", ARRAYOFCONST((Str.Trim(), Value)));// .
				FList->Add(Str);
			}
		}
		else
		{
            if(SubName) Str = Str.Format("%s=%s", ARRAYOFCONST((Str.Trim(), Value)));// .
			FList->Add(Str);
        }
	}

	reg->CloseKey();
        //FList->CustomSort(ListSortIntegerProc);
        return FList;
}


프로그램 초짜 님이 쓰신 글 :
: 수고 많으십니다.
:
: 주말에 뻘짓으로 땀 나는 초짜 입니다.
:
: TRegistry* Registry = new TRegistry();
:
: 레지스트리 안으로 들어가서 연결된 시리얼 포트의 포트 번호를 찾는데 성공하였습니다.
:
: 근데 시리얼 포트의 이름을 얻기 위해선 어떻게 해야 하는지 검색이 안되서
:
: 질문 드려 봅니다.
:
: 데탑에 장치 관리자 에 가보면
:
: 포트(COM 및 LPT)
:      |____통신 포트(COM2)
:      |____ 프린터 포트(LPT1)
:
: 이라고 되어 있는데
: 제가 Usb를 꼽으면
:
: 포트(COM 및 LPT)
:      |____통신 포트(COM2)
:      |____ 프린터 포트(LPT1)
:      |____ Prolific USB_to_Serial Comm Port(Com8)
:
: 이라고 뜨는데 저기서
:  Prolific USB_to_Serial Comm Port 라는 이름을 얻고 싶어요
:
: 도움 부탁 드립니다.

+ -

관련 글 리스트
69650 연결된 시리얼 포트 정보 얻기 프로그램 초짜 10980 2013/06/15
69670     Re:감사합니다. 프로그램초짜 8204 2013/06/18
69669     Re:연결된 시리얼 포트 정보 얻기 망치 7772 2013/06/18
69657     Re:연결된 시리얼 포트 정보 얻기 gomsun2 4619 2013/06/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.