原理:通过强大的WMI,用
Win32_PnPEntit 即插即用的管理机制来搜索
function RewiseUSBPrint(): String;
var
i: integer;
Locator: OleVariant;
WMI: OleVariant;
RET: OleVariant;
Enum: IEnumVariant;
Tmp: OleVariant;
Value: Cardinal;
begin
try
Result := '';
i:=0;
Locator := CreateOleObject('WbemScripting.SWbemLocator');
WMI := Locator.ConnectServer('.', '', '', '');
Ret := WMI.ExecQuery('SELECT * FROM Win32_PnPEntity');
Enum:= IUnknown(RET._NewEnum) as IEnumVariant;
while (Enum.Next(1, Tmp, Value) = S_OK) do
begin
if Pos('USBPRINT', Tmp.DeviceID) > 0 then //USBPRINT
begin
Result := Result + Tmp.PNPDeviceID+'\';
Inc(i);
end;
end;
Result := StringReplace(Result, 'USBPRINT\', '', [rfReplaceAll]) + '-->'+IntToStr(i);
except on e:exception do
Result := 'RewiseUSBPrint Error??'+e.Message;
end;
end;
调用结果,本电脑连接了两台打印机:JOLIMARKCJ-222D\8&FEE0C07&0&USB002\UNKNOWNPRINTER\8&3B5B3219&0&USB004\-->2
function RewiseUSBPrint(): String;
var
i: integer;
Locator: OleVariant;
WMI: OleVariant;
RET: OleVariant;
Enum: IEnumVariant;
Tmp: OleVariant;
Value: Cardinal;
begin
try
Result := '';
i:=0;
Locator := CreateOleObject('WbemScripting.SWbemLocator');
WMI := Locator.ConnectServer('.', '', '', '');
Ret := WMI.ExecQuery('SELECT * FROM Win32_PnPEntity');
Enum:= IUnknown(RET._NewEnum) as IEnumVariant;
while (Enum.Next(1, Tmp, Value) = S_OK) do
begin
if Pos('USBPRINT', Tmp.DeviceID) > 0 then //USBPRINT
begin
Result := Result + Tmp.PNPDeviceID+'\';
Inc(i);
end;
end;
Result := StringReplace(Result, 'USBPRINT\', '', [rfReplaceAll]) + '-->'+IntToStr(i);
except on e:exception do
Result := 'RewiseUSBPrint Error??'+e.Message;
end;
end;
调用结果,本电脑连接了两台打印机:JOLIMARKCJ-222D\8&FEE0C07&0&USB002\UNKNOWNPRINTER\8&3B5B3219&0&USB004\-->2
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/166523/viewspace-1166232/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/166523/viewspace-1166232/