怎么侦测USB端口上有设备插拔? rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 GUIDstatic 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; }} 用c++设计一个小程序,如何规范定义各种类名及其所用的变量,使人阅读时能容易分辨那个部分对应那个程序 关于深入浅出MFC socket如何判断状态,比如网络是否断开? 关于读取机器码和网卡地址的问题 ActiveX是什么东西啊,我不知道?请告诉小弟 如何将MFC中通过控件实现的串口通讯功能,在Dll文件中实现,方便其他程序的调用? installshield如何安装硬件的驱动程序(ini,sys文件) HTTP隧道和SSL隧道区别 问个DLL的问题 请问如何控制工具栏的按钮 怎么让应用程序与某种内类的文档关联起来? 多按钮时间事件在一个事件中处理?
----------------------------------------------------------
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;
}
}