用的是CyApi的CCyUSBDevice类做的。先打算用事件,但一次插拨中有很多事件发生,很不好判断。只好在定时器里查,查联上好说,设个变量,如果之前没有联上就搜索设备。断开没有找到合适的判断方法,现在暂时用GetCount()==0来判断。有什么比较好的方法吗?
附用事件的测试代码和结果: BOOL CUSBFileTransforExampleDlg::OnDeviceChange( UINT nEventType, DWORD_PTR dwData ){ PDEV_BROADCAST_HDR pDEV=( PDEV_BROADCAST_HDR )dwData; CString Str=""; CString Str2="";
if(nEventType==DBT_DEVICEARRIVAL){ Str="DEVICEARRIVAL: "; }else if(nEventType==DBT_DEVNODES_CHANGED){ Str="DEVNODES_CHANGED:"; }else if(nEventType==DBT_DEVICEREMOVECOMPLETE){ Str="DEVICEREMOVECOMPLETE:"; } if(pDEV!=NULL){ Str2.Format("devicetype=%d size=%d",pDEV->dbch_devicetype,pDEV->dbch_size); } else Str2="NULL LParam
"; UpdataHistoryEdit(Str+Str2); return 1; }
插上设备时显示: DEVNODES_CHANGED:NULL LParam
DEVICEARRIVAL: devicetype=5 size=188 DEVNODES_CHANGED:NULL LParam
DEVNODES_CHANGED:NULL LParam
DEVICEREMOVECOMPLETE:devicetype=5 size=188 DEVNODES_CHANGED:NULL LParam
devicetype=6 size=55 devicetype=6 size=55 devicetype=6 size=55 devicetype=6 size=55 devicetype=6 size=55 devicetype=6 size=55 devicetype=6 size=55 DEVICEARRIVAL: devicetype=5 size=188 DEVNODES_CHANGED:NULL LParam
devicetype=6 size=55 devicetype=6 size=55 devicetype=6 size=55
拨掉设备显示: DEVNODES_CHANGED:NULL LParam
DEVICEREMOVECOMPLETE:devicetype=6 size=44 DEVICEREMOVECOMPLETE:devicetype=5 size=188
插拨USB鼠标也有事件。。。 |