怎么侦测USB端口上有设备插拔

WM_DEVICECHANGLE消息,nEventType为DBT_DEVICEARRIVAL且dwData  = 7时就是U盘连接事件(没弄错的话)

我想RegisterDeviceNotification中参数DEV_BROADCAST_DEVICEINTERFACE结构体的GUID dbcc_classguid;为设备的GUID,填什么参数啊?

typedef void (__stdcall *FUNC_TYPE_HIDGUID) (

OUT   LPGUID   HidGuid

);



FUNC_TYPE_HIDGUID _HidD_GetHidGuid = NULL;



 // USB version GUID

static GUID GUID_CLASS_ITOKEN2 = 

{0x171638f7, 0x1ead, 0x4873, {0xba, 0x98, 0xc9, 0x66, 0xab, 0xcf, 0x1, 0x42}};



static GUID GUID_CLASS_ITOKEN2_HID;



BOOL    bRegisted  = FALSE;

typedef  PVOID           HDEVNOTIFY;

HDEVNOTIFY hDevNotify1 = NULL;

HDEVNOTIFY hDevNotify2 = NULL;



void CSample_13Dlg::OnRegister() 

{

// TODO: Add your control notification handler code here

HWND hWnd;

//HDEVNOTIFY hDevNotify = NULL;

    DEV_BROADCAST_DEVICEINTERFACE dbf;

BOOL bRes;





if (_HidD_GetHidGuid == NULL)

{

HINSTANCE hMod = LoadLibrary("hid.dll");

_HidD_GetHidGuid = (FUNC_TYPE_HIDGUID)GetProcAddress(hMod, "HidD_GetHidGuid");

ASSERT(_HidD_GetHidGuid != NULL);



// Get HID device GUID 

_HidD_GetHidGuid(&GUID_CLASS_ITOKEN2_HID);

FreeLibrary(hMod);

}





if (!bRegisted) // if not registered

{



hWnd = this->m_hWnd;



// Register ITOKEN2 device notification 

memset(&dbf, 0x00, sizeof(dbf));



dbf.dbcc_size       = sizeof(DEV_BROADCAST_DEVICEINTERFACE);

dbf.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;

dbf.dbcc_classguid  = GUID_CLASS_ITOKEN2;



hDevNotify2 = RegisterDeviceNotification( hWnd, 

&dbf,

DEVICE_NOTIFY_WINDOW_HANDLE

);



ASSERT(hDevNotify2 != NULL);



// Register ITOKEN2 HID device notification

memset(&dbf, 0x00, sizeof(dbf));



dbf.dbcc_size       = sizeof(DEV_BROADCAST_DEVICEINTERFACE);

dbf.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;

dbf.dbcc_classguid  = GUID_CLASS_ITOKEN2_HID;



hDevNotify1 = RegisterDeviceNotification( hWnd, 

&dbf,

DEVICE_NOTIFY_WINDOW_HANDLE

);



ASSERT(hDevNotify1 != NULL);



GetDlgItem(IDC_REGISTER)->SetWindowText("Unregister");



bRegisted = TRUE;

}

else 

{

if (hDevNotify1) // Unregister ITOKEN2 device notification 

{

bRes = UnregisterDeviceNotification(hDevNotify1);



ASSERT(bRes);

}



if (hDevNotify2) // Unregister ITOKEN2 HID device notification

{

bRes = UnregisterDeviceNotification(hDevNotify2);



ASSERT(bRes);

}



GetDlgItem(IDC_REGISTER)->SetWindowText("register");



bRegisted = FALSE;

}

}

你可能感兴趣的:(端口)