怎么侦测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;
}
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值