需要获得本机的硬件信息,用wmi实现比较方便。
写了一段代码但是执行到Enum := IUnknown(Helper3.PropertyGet('_NewEnum',[])) as IEnumVariant;时报:不能转换这种类型。
单独执行Helper3.PropertyGet('_NewEnum',[])也是报一样的错。
代码如下:
function TUSBKEY.GetCpuId : string;
var
Locator: OleVariant;
Helper : System.DispatchHelper;
Helper2 : System.DispatchHelper;
Helper3 : System.DispatchHelper;
Helper4 : System.DispatchHelper;
WMI: OleVariant;
RET: OleVariant;
Enum: IEnumVariant;
Tmp: OleVariant;
Value: Cardinal;
obj: TObject;
str : string;
begin
Locator := ComObj.CreateOleObject('WbemScripting.SWbemLocator');
Helper := System.DispatchHelper.Create(Locator);
WMI := Helper.InvokeMethod('ConnectServer',['.','','','','']);
Helper2 := System.DispatchHelper.Create(WMI);
Ret := Helper2.InvokeMethod('ExecQuery',['SELECT * FROM Win32_Processor']);
Helper3 := System.DispatchHelper.Create(Ret);
Enum := IUnknown(Helper3.PropertyGet('_NewEnum',[])) as IEnumVariant;
while (Enum.Next(1, Tmp, Value) = System_.S_OK) do
begin
Helper4 := System.DispatchHelper.Create(Tmp);
str := Helper4.PropertyGet('ProcessorId',[str]).ToString();
Result := str;
end;
end; |