那位大侠有检测usb口是否有usb-key插入的代码给小弟一份,非常感谢!!!自己写了一个程序,启动一个线程不停的去监控usb口,但是这样只能监控到一个口,哪个口先插入usb设备就检测那个口,其他的口即使后插入了设备,无法监控。所以小弟求一个可以在任意时刻获取所有的usb口是否有usb-key插入的代码,是usb-key,不是普通的u盘。小弟不胜感激。
[email protected]

解决方案 »

  1.   

    void   RegisterForDevChange(HWND   hDlg,   PVOID   *hNotifyDevNode)   
      {   
              DEV_BROADCAST_DEVICEINTERFACE   *pFilterData   =     
                            (DEV_BROADCAST_DEVICEINTERFACE*)     
                            _alloca(sizeof(DEV_BROADCAST_DEVICEINTERFACE));   
              ASSERT   (pFilterData);   
          
              ZeroMemory(pFilterData,   sizeof(DEV_BROADCAST_DEVICEINTERFACE));   
          
              pFilterData->dbcc_size   =   sizeof(DEV_BROADCAST_DEVICEINTERFACE);   
              pFilterData->dbcc_devicetype   =   DBT_DEVTYP_DEVICEINTERFACE;   
              pFilterData->dbcc_classguid     =   GUID_CLASS_INPUT;     
          
              *hNotifyDevNode   =   RegisterDeviceNotification(hDlg,   pFilterData,   
                              DEVICE_NOTIFY_WINDOW_HANDLE);   
      }   
      Then,   in   your   main   window   procedure,   check   for   messages   announcing   that   a   device   has   been   attached,   is   about   to   be   removed,   or   has   been   removed,   as   follows:   
        
      MyWindowProc(HWND   hWnd,   UINT   nMsg,   WPARAM   wParam,   LPARAM   lParam)   
      {   
              switch   (nMsg)   
              {   
                      case   WM_DEVICECHANGE:   
                      {   
                              switch   (wParam)   
                              {   
                                      case   DBT_DEVICEARRIVAL:   
                                              //   Handle   device   arrival   
                                              break;   
        
                                      case   DBT_DEVICEQUERYREMOVE:   
                                              //   Handle   device   removal   request   
                                              break;   
                                        
                                      case   DBT_DEVICEREMOVECOMPLETE:   
                                              //   Handle   device   removal   
                                              break;   
                              }   
                      }   
      .   
      .   
      .   
              }   
      }