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
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
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;