Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов методов WMI с 2-мя и более параметрами 
:(
    Опции темы
-Сергей-
Дата 6.4.2017, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 2.8.2003
Где: Россия

Репутация: 1
Всего: 1



Всем привет!
В общем при вызове методов без параметров и с одним параметром проблем не возникает, а при вызове методов с параметрами больше одного возникает ошибка "Недопустимые параметры метода"
Вот реализация на примере изменения яркости экрана (на стационарных компах не будет работать, только на ноутбуках, нетбуках и пр.)
Код

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;

--------------------
Для утвердительного ответа достаточно лишь одного слова - "да". Все прочие слова придуманы, чтобы сказать "нет".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1028 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.