USB장치 연결/연결해제 이벤트 처리하기

USB 장치가 연결되거나 해제 됐을 때는 이벤트를 처리하는 방법을 여기 저기 찾아 보다가 대충 적어봅니다.

 

1. 메시지 맵 등록

 

메시지 맵에 이벤트를 함수와 연결 시킨다.

BEGIN_MESSAGE_MAP(CDlg, CDialog)
        ON_MESSAGE(WM_DEVICECHANGE, fnDeviceChange)
END_MESSAGE_MAP()

 

2. 이벤트를 받을 장치를 등록한다.

장치 등록은 RegisterForDeviceNotifications()함수를 이용한다
void CDlg::RegisterForDeviceNotifications()
    {
        DEV_BROADCAST_DEVICEINTERFACE DevBroadcastDeviceInterface;
        HDEVNOTIFY DeviceNotificationHandle;
        DevBroadcastDeviceInterface.dbcc_size = sizeof(DevBroadcastDeviceInterface);
        DevBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
        DevBroadcastDeviceInterface.dbcc_classguid = DeviceGuid;   /* 해당 장치의 GUID */

        DeviceNotificationHandle =
            RegisterDeviceNotification(m_hWnd, &DevBroadcastDeviceInterface, 
                   DEVICE_NOTIFY_WINDOW_HANDLE);
    }

3. 처리함수 구현

처리함수는 WM_DEVICECHANGE에서 넘어오는 파라메터를 이용해서 한다 자세한 파라메터 정보는 MSDN을 참조하시기 바랍니다.

void CDlg::fnDeviceChange(WPARAM wParam, LPARAM lParam)
{
    switch(wParam)
    {
        case DBT_DEVICEARRIVAL:
            /* 장치 연결 됬을 때 처리 */ 
            break;
        case DBT_DEVICEREMOVECOMPLETE:
            /* 장치 연결 해제 됬을 때 처리 */ 
            break;

        default:
            break;
    }
}

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다