监控USB设备插入/拔出写法2

//检测设备增加移除相关消息
LRESULT CMiniHidTestDlg::OnMyDeviceChange(WPARAM wParam, LPARAM lParam)
{
	CString pDevName ="",strDevInfo,strDevid="",strDepid ="";
	int  npos;
	int ivid,ipid,idvid,idpid; 
	bool bInsert =false;
	bool bRemove =false;
	if ( DBT_DEVICEARRIVAL == wParam || DBT_DEVICEREMOVECOMPLETE == wParam ) {
		PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam;
		PDEV_BROADCAST_DEVICEINTERFACE pDevInf;
		PDEV_BROADCAST_HANDLE pDevHnd;
		PDEV_BROADCAST_OEM pDevOem;
		PDEV_BROADCAST_PORT pDevPort;
		PDEV_BROADCAST_VOLUME pDevVolume;

		 if(wParam==DBT_DEVICEARRIVAL)//有新设备插入系统
		 {
			 bInsert =true;
		 }else if (wParam ==DBT_DEVICEREMOVECOMPLETE)
		 {
             bRemove =true;
		 }
		switch( pHdr->dbch_devicetype ) {	   
		case DBT_DEVTYP_DEVICEINTERFACE:
			pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr;
				strDevInfo =pDevInf->dbcc_name;
				strDevInfo.MakeUpper(); //全部转成大写          
      			npos =strDevInfo.Find("HID#VID_",0);
				if (npos >0 )   		
				{
                     strDevInfo =strDevInfo.Mid(12);
					 npos =strDevInfo.Find("#",0);
                     if (npos >0)
					 {
                        strDevInfo =strDevInfo.Mid(0,npos);
						npos =strDevInfo.Find("&",0);
						if (npos >0)
						{
                           strDevid =strDevInfo.Mid(0,npos);
                           strDepid =strDevInfo.Mid(npos +5,strDevInfo.GetLength() -(npos +5));
						}
						
					 }
				} 

				if (strDepid.GetLength() >0)
				{
					sscanf(system_config.susbvid,"%x",&ivid);   
					sscanf(system_config.susbpid,"%x",&ipid); 
					sscanf(strDevid,"%x",&idvid);   
					sscanf(strDepid,"%x",&idpid); 
					if ((bOpScucess) && (ivid ==idvid) && (ipid ==idpid) && bRemove)  //如果打开了
					{
					     bOpScucess =false;  
						  AddListString("USB设备移除,VID["+strDevid +"],PID[" +strDepid+"]");
						  nReadTimeOut =TRUE;
						  Sleep(100);
						  TipSucess("USB移除",FALSE);
						  ClearALLResult();
			//			  ResetContent();
                         
						  TerminateThread(m_hOneSendThread,0);
						  
						  CheckUsbResult();
						  EnableButton(true);
						  if(m_bOpenThreadBeginStart)
						  {
							  StopThreadBeginStart();
							  nBrushTimes=0,nFailTimes=0,nSuecessTimes=0;
						  }
						  if(m_bCreateSendThread)
						  {
								StopThread();
						  }
              
					}else
					{
						if ( (ivid ==idvid) && (ipid ==idpid) && bInsert) 
						{
							
					     	AddListString("USB设备插入,VID["+strDevid +"],PID[" +strDepid+"]");	
							TipSucess("USB插入",TRUE);
							TipTesttype("USB插入",TRUE);
                            nReadTimeOut =FALSE;
							Sleep(1000);
							CheckUsbResult();
							startAut();
							if (m_chk_auto.GetCheck())
							{
							}
								//OnTestAll();
								//TestStart(0);

						}
						else
						{
                             AddListString("USB设备移除,VID["+strDevid +"],PID[" +strDepid+"]");
							// TipTesttype("USB设备移除,VID["+strDevid +"],PID[" +strDepid+"]");
							 bOpScucess =false;
							 nReadTimeOut =TRUE;
							 TipSucess("USB移除",FALSE);
							 TipTesttype("USB移除",false);
							 ClearALLResult();
							 Sleep(100);
							 ResetContent();
						     CheckUsbResult();
						     EnableButton(true);
							 TerminateThread(m_hOneSendThread,0);

						}
					 
					}
				}
			
			break;
			
		case DBT_DEVTYP_HANDLE:
			pDevHnd = (PDEV_BROADCAST_HANDLE)pHdr;
			break;
			
		case DBT_DEVTYP_OEM:
			pDevOem = (PDEV_BROADCAST_OEM)pHdr;
			break;
			
		case DBT_DEVTYP_PORT:
			pDevPort = (PDEV_BROADCAST_PORT)pHdr;		
			break;
			
		case DBT_DEVTYP_VOLUME:
			pDevVolume = (PDEV_BROADCAST_VOLUME)pHdr;
			break;
		}
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物联网小镇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值