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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1077] USB to Serial Comport 연결 및 해지 시 윈도우 이밴트 받기.
송신영 [palindrome] 10055 읽음    2012-03-14 17:01
메시지 맵 이용 방법.
나중에 잊어버릴 경우 여길 검색해서 찾기위해..
단  BC++ 6.0 사용 시 Vista 와 Win7에서는 장치 이름이 정상적으로 출력되지 않고 앞 글자 하나만 출력됨.
유니코드 문제... 유니코드 지원하는 버전 사용 시 정상적으로 얻어옴.

* h

    void __fastcall OnDeviceChange(TMessage& Message);

    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_DEVICECHANGE , TMessage, OnDeviceChange)
    END_MESSAGE_MAP(TForm)
     
    


* cpp

#include  

void __fastcall TForm1::OnDeviceChange(TMessage& Message)
{
    PDEV_BROADCAST_PORT pdbcp = (PDEV_BROADCAST_PORT) Message.LParam;

    // 장치가 연결되었을 경우
    if(Message.WParam == DBT_DEVICEARRIVAL) {
        // 연결된 장치가 Port인 경우.
        if (pdbcp->dbcp_devicetype == DBT_DEVTYP_PORT) {
            //AnsiString sTemp;
            char *COMPort = pdbcp->dbcp_name;
            AnsiString sMessage;
            sMessage.printf("[%s]Port가 연결됨.", COMPort);
            MessageBox(0, sMessage.c_str(), "", MB_ICONWARNING|MB_OK);
        }
    }
    // 장치가 해지된 경우 
    else if(Message.WParam == DBT_DEVICEREMOVECOMPLETE) {
        // 해지된 장치가 Port인 경우. 
        if(pdbcp->dbcp_devicetype == DBT_DEVTYP_PORT) {
            //AnsiString sTemp;
            char *COMPort = pdbcp->dbcp_name;
            AnsiString sMessage;
            sMessage.printf("[%s]Port가 연결 해지 됨.", COMPort);
            MessageBox(0, sMessage.c_str(), "", MB_ICONWARNING|MB_OK);
        }
    }
}



C++ Builder 2010 이용할 경우 정상적으로 장치 이름 얻어옴. ㅡㅡ;
(Project 옵션 Directories and Conditionals / _TCHAR maps to : wchar_t 로 설정)

#include  
#include 

void __fastcall TForm1::OnDeviceChange(TMessage& Message)
{
    PDEV_BROADCAST_PORT pdbcp = (PDEV_BROADCAST_PORT) Message.LParam;

    // 장치가 연결되었을 경우
    if(Message.WParam == DBT_DEVICEARRIVAL) {
        // 연결된 장치가 Port인 경우.
        if (pdbcp->dbcp_devicetype == DBT_DEVTYP_PORT) {
            _TCHAR *COMPort = pdbcp->dbcp_name;
            String sMessage;
            sMessage.printf(_T("[%s]Port가 연결됨."), COMPort);
            MessageBox(0, sMessage.c_str(), _T(""), MB_ICONWARNING|MB_OK);
        }
    }
    // 장치가 해지된 경우
    else if(Message.WParam == DBT_DEVICEREMOVECOMPLETE) {
        // 해지된 장치가 Port인 경우.
        if(pdbcp->dbcp_devicetype == DBT_DEVTYP_PORT) {
            _TCHAR *COMPort = pdbcp->dbcp_name;
            String sMessage;
            sMessage.printf(_T("[%s]Port가 연결 해지 됨."), COMPort);
            MessageBox(0, sMessage.c_str(), _T(""), MB_ICONWARNING|MB_OK);
        }
    }
}




검색어 : ComPort / USB to Serial / 장치 연결 / 장치 해지 / ComPort 빠짐 / ComPort 연결 /

+ -

관련 글 리스트
1077 USB to Serial Comport 연결 및 해지 시 윈도우 이밴트 받기. 송신영 10055 2012/03/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.