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