小弟最近在做个功能,里面有辨别飞天的USB KEY是否插入和拔出,因为我希望是即时获得消息,所以没有用循环,而是用了WINDOWS消息OnDeviceChange(UINT nEventType,DWORD dwData).
    在消息处理里面,通过以下代码来做检测:
         switch(nEventType)
{
case DBT_DEVICEARRIVAL:   //设备插入
                ....
break; case DBT_DEVICEREMOVECOMPLETE:    //设备拔除
                ....
        break;
}        发现识别不了,然后又调试了一下,发现U盘插入和拔除都会发给OnDeviceChange(UINT nEventType,DWORD dwData)函数中nEventType参数一个整型7,现在也不知道该怎么思考.       有达人做过这块的可以给点建议吗?

解决方案 »

  1.   

    在WM-DEVICECHANGE事件中(不知道插入或拔出),对USB设备检测10次,如果检测到则是插入USB,若检测不到是拔出USB设备  
      bool   result;  
      if   (message   ==   WM_DEVICECHANGE)    
      {  
       
      while   (!result   &&   (i_number   <   10))  
      {  
      //Sleep(1000);  
      i_number   ++;  
              status   =   EPS_OpenDevice(   &ctx,   Flags   );  
                      if(status!=EPS_SUCCESS)  
      {  
                             
                    EPS_CloseDevice(&ctx);  
                    continue;  
                     
      }  
      else  
      {  
      result   =   true;  
      EPS_CloseDevice(&ctx)   ;  
      break;  
      }  
               
      }  
      if   (!result)  
      {  
       
      ::MessageBox(NULL,"                   USB钥匙被拔出,进入自动加密模式!                       ","提示信息",MB_OK);  
      SendMessage(WM_VERIFY,0,0);  
      }  
               
       
      }
      

  2.   

    设备变化时候,枚举此类设备。
    先获取所有HIDs的设备信息,找出与你这个设备 Vendor ID 和 Product ID相匹配的设备。
    个人一点建议。
      

  3.   

    是不是飞天的Key有什么特别吗?
      

  4.   

    查找设备里面是否有 飞天key的vid, pid即可。