티스토리 뷰
목차
반응형
MFC USB 인식 확인 및 정보 통신 방법 2가지 (Dialog, DocView)
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 |
[장치 검색 후 인식 - 프로그래밍 예제]
ps1. MFC 참조 사이트
ps2. Dialog 기반에 보면 파일을 읽어서 전송하는 소스가 구현되어 있는데, 테스트 프로그램 만들다가 귀찮아서 안 지웠으니 알아서 쓰세요.
MFC USB 인식 확인 및 정보 통신 방법 2가지 (Dialog, DocView)
반응형