怎么侦测USB端口上有设备插拔?
2007-02-28 20:47
429 查看
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;
}
}
我想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;
}
}
相关文章推荐
- 怎么侦测USB端口上有设备插拔
- 怎么侦测USB端口上有设备插拔?
- 介绍Windows侦测遍历Usb设备(PID&VID)及相应其插拔状态的方法
- Android的Usb设备的监听(Dev)外设端口的判定以及耳机的插拔
- Android的Usb设备的监听(Dev)外设端口的判定以及耳机的插拔
- 桌面1分钟显示一次“无法识别的USB设备”怎么关闭它?
- <Raspberry:udev> linux下给特定USB端口特定设备绑定自定义设备符
- QT5 检测 usb设备插拔
- 打印USB 设备热插拔的字符信息
- USB及手机平板设备插拔响应解决方案
- usb驱动之设备插拔检测
- 获取USB设备插拔消息的备忘
- 怎么在VMware虚拟机中使用usb设备
- USB HID 复杂设备怎么做?
- win7系统纯净版怎么设置隐藏usb设备?
- C#:DeviceNotifier USB设备插拔监听方法
- 树莓派给特定USB端口特定设备绑定自定义设备符
- 获取USB设备插拔消息的备忘
- USB及手机平板设备插拔响应解决方案
- 经常插拔USB设备导致USB功能失效:通用串行总线控制器出行黄色感叹号的解决办法