Function RewiseUSBISOK(Const CheckString:String='要查找的vid/pid'):Boolean;  //\usb\vid_XXXX\pid_XXXX\XXXXXX
var
  Locator: OleVariant;
  WMI: OleVariant;
  RET: OleVariant;
  Enum: IEnumVariant;
  Tmp: OleVariant;
  Value: Cardinal;
begin
  Result:=False;
  Locator:=CreateOleObject('WbemScripting.SWbemLocator');
  WMI:=Locator.ConnectServer('.','','','');
  Ret := WMI.ExecQuery('SELECT * FROM Win32_USBHub');//这里Win32_USBHub为检测项
  Enum:= IUnknown(RET._NewEnum) as IEnumVariant;
  while (Enum.Next(1,Tmp, Value) = S_OK) do
  begin
    ShowMessage(Tmp.PNPDeviceID);
    if Pos(CheckString,LowerCase(Tmp.PNPDeviceID))>0 then
    begin
      Result:=True;
      break;
    end;
    ShowMessage(Tmp.PNPDeviceID);//Tmp为检测到返回的数据集合,其中PNPDeviceID为集合中的对象,包含了PID和VID码
  end;
end;以上可以查找指定vid/pid的U盘设备,但不知道如何找出该设备的路径,或者知道路径比如为H:盘,如何判断H:盘U盘设备的vid/pid

解决方案 »

  1.   

    U盘检测器V5.0就能读出vid/pid和盘符路径
      

  2.   

    DriverList   :=   GetLogicalDrives;  
       
          for   i   :=   1   to   Length(DriverList)   do  
          begin  
              if   Terminated   then   Exit;  
              driver:=Pchar(DriverList[i]   +   ':\');   //要显示的驱动器名  
              x   :=   GetDriveType(driver);  
              Case   x   of  
                  //该驱动器是可移动驱动器  
                  2:   begin   end;  
                  //该驱动器是固定驱动器  
                  3:   begin   end;  
                  //该驱动器是网络驱动器  
                  4:   begin   end;  
                  //该驱动器是CD-ROM驱动器  
                  5:   begin   end;  
                  //该驱动器是虚拟驱动器  
                  6:   begin   end;  
                  //该驱动器无效  
              else   begin   end;  
              End;  
          end;  
       
       
      function   GetLogicalDrives   :   WideString;  
      var  
          drives   :   set   of   0..25;  
          drive   :   integer;  
      begin  
          Result   :=   '';  
          DWORD(   drives   )   :=   Windows.GetLogicalDrives;  
          for   drive   :=   0   to   25   do  
              if   drive   in   drives   then  
          Result   :=   Result   +   Chr(   drive   +   Ord(   'A'   ));  
      end;