Me arroja el siguiente error de parámetros y no se que puede ser.
objWMIService.ExecMethod('Win32_WindowsProductActivation', 'SetProductKey', objInParams);
Código Delphi
[-]
program GetWMI_Info;
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj,
Variants;
function VarArrayToStr(const vArray: variant): string;
function _VarToStr(const V: variant): string;
var
Vt: integer;
begin
Vt := VarType(V);
case Vt of
varSmallint,
varInteger : Result := IntToStr(integer(V));
varSingle,
varDouble,
varCurrency : Result := FloatToStr(Double(V));
varDate : Result := VarToStr(V);
varOleStr : Result := WideString(V);
varBoolean : Result := VarToStr(V);
varVariant : Result := VarToStr(Variant(V));
varByte : Result := char(byte(V));
varString : Result := String(V);
varArray : Result := VarArrayToStr(Variant(V));
end;
end;
var
i : integer;
begin
Result := '[';
if (VarType(vArray) and VarArray)=0 then
Result := _VarToStr(vArray)
else
for i := VarArrayLowBound(vArray, 1) to VarArrayHighBound(vArray, 1) do
if i=VarArrayLowBound(vArray, 1) then
Result := Result+_VarToStr(vArray[i])
else
Result := Result+'|'+_VarToStr(vArray[i]);
Result:=Result+']';
end;
function VarStrNull(const V:OleVariant):string; begin
Result:='';
if not VarIsNull(V) then
begin
if VarIsArray(V) then
Result:=VarArrayToStr(V)
else
Result:=VarToStr(V);
end;
end;
function GetWMIObject(const objectName: String): IDispatch; var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;
procedure Invoke_Win32_WindowsProductActivation_SetProductKey;
var
objWMIService : OLEVariant;
objInvoker : OLEVariant;
objInParams : OLEVariant;
objOutParams : OLEVariant;
begin
objWMIService := GetWMIObject(Format('winmgmts:\\%s\%s',['.','root\CIMV2']));
objInvoker := objWMIService.Get('Win32_WindowsProductActivation');
objInParams := objInvoker.Methods_.Item('SetProductKey').InParameters.SpawnInstance_();
objInParams.ProductKey:= '7777755555777775555577777';
objOutParams := objWMIService.ExecMethod('Win32_WindowsProductActivation', 'SetProductKey', objInParams);
Writeln('ReturnValue '+VarStrNull(objOutParams.ReturnValue));
end;
begin
try
CoInitialize(nil);
try
Invoke_Win32_WindowsProductActivation_SetProductKey;
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
begin
Writeln(E.Classname, ':', E.Message);
Readln;
end;
end;
end.