Всем привет! В общем при вызове методов без параметров и с одним параметром проблем не возникает, а при вызове методов с параметрами больше одного возникает ошибка "Недопустимые параметры метода" Вот реализация на примере изменения яркости экрана (на стационарных компах не будет работать, только на ноутбуках, нетбуках и пр.)
| Код | procedure TForm1.Button1Click(Sender: TObject); var SWbemLocator : ISWbemLocator; Service : ISWbemServices; ObjectSet : ISWbemObjectSet; InParam, SObject : ISWbemObject; PropValue : OleVariant; PropSet : ISWbemPropertySet; SProp : ISWbemProperty;
PropEnum, Enum : IEnumVariant; Value : Cardinal; begin SWbemLocator := CoSWbemLocator.Create; Service:= SWbemLocator.ConnectServer('.', 'root\wmi', '', '', '', '', 0, nil); // получаем текущую яркость экрана SObject:= Service.Get('WmiMonitorBrightness', wbemFlagUseAmendedQualifiers, nil); ObjectSet:= SObject.Instances_(0, nil); Enum:= (ObjectSet._NewEnum) as IEnumVariant;
while (Enum.Next(1, PropValue, Value) = S_OK) do begin SObject:= IUnknown(PropValue) as SWBemObject; PropSet:= SObject.Properties_; PropEnum:= (PropSet._NewEnum) as IEnumVariant; while (PropEnum.Next(1, PropValue, Value) = S_OK) do begin SProp:= IUnknown(PropValue) as SWBemProperty; if SProp.Name = 'CurrentBrightness' then Label1.Caption := Format('CurrentBrightness = %d%%',[Integer(SProp.Get_Value)]); end; end;
// устанавливаем яркость экрана SObject:= Service.Get('WmiMonitorBrightnessMethods', wbemFlagUseAmendedQualifiers, nil);
InParam := SObject.Methods_.Item('WmiSetBrightness', 0).InParameters.SpawnInstance_(0); PropValue:= 100; InParam.Properties_.Add('Brightness', wbemCimtypeUint8, False, 0).Set_Value(PropValue); PropValue:= 50; InParam.Properties_.Add('Timeout', wbemCimtypeUint32, False, 0).Set_Value(PropValue);
{ // Проверка параметров PropEnum := (InParam.Properties_._NewEnum) as IEnumVariant; while (PropEnum.Next(1, TempObj, Value) = S_OK) do begin SProp:= IUnknown(TempObj) as SWBemProperty; ShowMessage(SProp.Name+'='+String(SProp.Get_Value)); end; } // при вызове метода возникает ошибка SObject.ExecMethod_('WmiSetBrightness', InParam, 0, nil); end;
|
|