티스토리 뷰

목차

    반응형

    MFC USB 인식 확인 및 정보 통신 방법 2가지 (Dialog, DocView)


    첨부 파일 


    Doc / View 기반 소스

    Test_File_Doc.zip


    다이얼로그 기반 소스

    TestFILEIO.zip


    MFC USB의 인식, 확인, 정보, 통신의 이론적인 건 맨 아래 참조 사이트에서 보세요.


    저는 구현 방법이 다르다는 걸 몰라서 한참 헤매였다능...;;


    MFC - USB 인식 소스[장치 검색 후 인식 - 프로그래밍 예제]



    MFC USB : 다이얼로그 기반


    1
    2
    XXXDlg.h
         afx_msg BOOL OnDeviceChange(UINT, DWORD);
    cs


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    XXXDlg.Cpp
    BEGIN_MESSAGE_MAP(CAgentNewDlg, CDialog)
         //{{AFX_MSG_MAP(CAgentNewDlg)
         ...
         //}}AFX_MSG_MAP
         ON_MESSAGE(WM_BNB_NOTIFYTRAY, OnNotifyTray)
         ON_WM_DEVICECHANGE()
         ON_MESSAGE(WM_HOTKEY, OnHotKey)
    END_MESSAGE_MAP()
     
    ...
     
    BOOL CAgentNewDlg::OnDeviceChange(UINT nEventType, DWORD dwData)
    {
       PDEV_BROADCAST_HDR hdr ;
       hdr = (PDEV_BROADCAST_HDR)dwData ;
     
        switch (nEventType)
        {
            case DBT_DEVICEARRIVAL:
                if(hdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
                    AfxMessageBox("Inserted!!") ;
            break ;
     
           case DBT_DEVICEREMOVECOMPLETE:
                if(hdr->dbch_devicetype != DBT_DEVTYP_VOLUME)
                     AfxMessageBox("Removed!!") ;
               break ;
        }
        return TRUE;
    }
    cs


    많은 MFC 참조 사이트에 존재하듯 위와 같은 소스로 USB 탈부착(인식) 감지가 됩니다.


    OnDeviceChange() 이벤트 함수를 추가했습니다. 이중 『DBT_DEVICEARRIVAL은 USB 장비의 탈부착(인식)』을 의미합니다.



    위의 링크에서 DBT_DEVICEARRIVAL에 대한 간단한 소개 글을 접할 수 있습니다. USB 정보를 알아내는 것이죠.




    MFC USB : Doc / View 기반


    1
    2
    //적당한 헤더 파일,
        afx_msg LRESULT OnMediaChanged(WPARAM wParam, LPARAM lParam) ;
    cs


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    //적당한 CPP 파일,
        ON_MESSAGE(WM_USER_MEDIACHANGED, OnMediaChanged)
    ...
    BOOL CNtfyDlg::OnInitDialog()
    {
        HWND hWnd = GetSafeHwnd() ;
        LPITEMIDLIST ppidl ;
        if(NOERROR == SHGetSpecialFolderLocation(hWnd, CSIDL_DESKTOP, &ppidl))
        {
            SHChangeNotifyEntry shCNE ;
            shCNE.pidl = ppidl ;
            shCNE.fRecursive = TRUE ;
            m_ulSHChangeNotifyRegister = SHChangeNotifyRegister(hWnd,
                SHCNE_DISKEVENTS,
                SHCNE_DRIVEADD  | SHCNE_DRIVEREMOVED,
                WM_USER_MEDIACHANGED,
                1,
                &shCNE) ;
         }
         else
             ASSERT(0) ;
         ...
    }
     
    LRESULT CNtfyDlg::OnMediaChanged(WPARAM wParam, LPARAM lParam)
    {
        SHNOTIFYSTRUCT* pshns = (SHNOTIFYSTRUCT*)wParam ;
        CString strPath, strMsg ;
        switch(lParam)
        {
        case SHCNE_DRIVEADD  :
            strPath = GetPathFromPIDL(pshns->dwItem1) ;
            if(FALSE == strPath.IsEmpty())
            {
                strMsg.Format("Media inserted into %s", strPath) ;
                AfxMessageBox(strMsg) ;
            }
            break ;
     
        case SHCNE_DRIVEREMOVED :
            strPath = GetPathFromPIDL(pshns->dwItem1) ;
            if(FALSE == strPath.IsEmpty())
           {
                strMsg.Format("Media removed into %s", strPath) ;
                AfxMessageBox(strMsg) ;
           }
           break ;
         }
          return NULL ;
    }
    cs




    MFC, USB 인식 확인 및 정보 통신 방법 2가지 (Dialog, DocView)[장치 검색 후 인식 - 프로그래밍 예제]


    ps1. MFC 참조 사이트



    ps2. Dialog 기반에 보면 파일을 읽어서 전송하는 소스가 구현되어 있는데, 테스트 프로그램 만들다가 귀찮아서 안 지웠으니 알아서 쓰세요.


    MFC USB 인식 확인 및 정보 통신 방법 2가지 (Dialog, DocView)

    반응형