본문 바로가기
C++ 200제/코딩 IT 정보

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

by vicddory 2017. 2. 2.
반응형

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)

반응형