COM, OLE: c VBS на FreePascal (Lazarus)

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

COM, OLE: c VBS на FreePascal (Lazarus)

Сообщение SergK » 07.12.2016 15:49:05

Прошу слишком не пинать слабо знаком с COM, OLE:

Есть строчки программы на VBS:
Set objExcel = CreateObject("Excel.Application")
или
Set adoCommand = CreateObject("ADODB.Command")
или
Set adoConnection = CreateObject("ADODB.Connection")

Если это переписать на FreePascal (Lazarus)
будет
objExcel := CreateOleObject('Excel.Application');
adoCommand := CreateOleObject('ADODB.Command');
adoConnection := CreateOleObject('ADODB.Connection');

А вот как перевести c VBS на FreePascal (Lazarus)
Стоки
Set objUser = GetObject("LDAP://" & сUserPath )
Set obj = GetObject("WinNT://" & ..... )
Set obj = GetObject("WinMgmts:") ?

GetActiveOleObject Явно не подходит.....
Вот если objExcel := GetActiveOleObject('Excel.Application',....);
то ПРИ ЗАПУЩЕННОМ Excel, найдет его экземпляр
А вот то что перечисленно выше....
SergK
новенький
 
Сообщения: 19
Зарегистрирован: 05.03.2011 18:24:51

Re: COM, OLE: c VBS на FreePascal (Lazarus)

Сообщение CynicRus » 08.12.2016 10:53:27

Прямого аналога нет, требуется создавать com объект и работать с этим самым объектом. Или же импортировать библиотеку типов и работать с импортированными интерфейсами.

Например для WMI запроса:
Код: Выделить всё
const
  FlagForwardOnly = $00000020;
  WMIClass = 'Win32_PhysicalMedia';
  WMIProperty = 'SerialNumber';
var
  SWbemLocator, WMIService: Variant;
  WbemObjectSet, WbemObject: Variant;
  EnumVarinat: IEnumvariant;
  SQL: WideString;
begin
  Result := False;
  SWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  WMIService := SWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
  SQL := WideString(Format('SELECT %s FROM %s', [WMIProperty, WMIClass]));
  try
    WbemObjectSet := WMIService.ExecQuery(SQL, 'WQL', FlagForwardOnly);
    EnumVarinat := IUnknown(WbemObjectSet._NewEnum) as IEnumVariant;
    if EnumVarinat.Next(1, WbemObject, nil) = 0 then
    begin
      if not VarIsNull(WbemObject.Properties_.Item(WMIProperty).Value) then
        ASerial := WbemObject.Properties_.Item(WMIProperty).Value;
    end;
    WbemObject := Unassigned;
    Result:= True;
  except
    on E: Exception do
      ShowMessage('Cannot get serial number: ' + sLineBreak + E.Message);
  end;
end;
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru