📄 unit1.pas.~57~
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ActiveX, ComObj;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
type
TUsbList=record
Name : string[10];
HardID: string[20];
VID: string[10];
PID: string[10];
SerialID: string[20];
FullID: string[50];
end;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Locator: OleVariant;
WMI: OleVariant;
RET: OleVariant;
Enum: IEnumVariant;
Tmp: OleVariant;
Value: Cardinal;
s: string;
n,m,vidp,pidp: integer;
Res: TStringList;
ResVP: TStringList;
NewUSB: Array of TUsbList;
begin
Locator := CreateOleObject('WbemScripting.SWbemLocator');
WMI := Locator.ConnectServer('.','','','');
Ret := WMI.ExecQuery('SELECT * FROM Win32_USBHub');
//这里Win32_USBHub为检测项,详见下表
Enum := IUnknown(RET._NewEnum) as IEnumVariant;
Res := TStringList.Create;
ResVP := TStringList.Create;
n := 0;
while (Enum.Next(1, Tmp, Value) = S_OK) do
begin
//ShowMessage(Tmp.DeviceID);
SetLength(NewUSB,n+1);
s:=Tmp.PnPDeviceID;
ExtractStrings(['\'], [], pchar(s), Res);
NewUSB[n].Name := trim(Res.Strings[0]);
NewUSB[n].HardID := trim(Res.Strings[1]);
vidp := Pos('VID_',trim(Res.Strings[1]));
pidp := Pos('PID_',trim(Res.Strings[1]));
if vidp <> 0 then
begin
end;
NewUSB[n].SerialID := trim(Res.Strings[2]);
NewUSB[n].FullID := trim(s);
Res.Clear;
n:= n + 1;
//showmessage(tmp.PID);
//Tmp为检测到返回的数据集合,其中PNPDeviceID为集合中的对象,包含了PID和VID码
end;
m := 0;
while m < n do
begin
showmessage(trim(NewUSB[m].FullID));
m := m + 1;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -