加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何读取WMI参数“Data”和“InsertionStrings”?

发布时间:2020-12-15 09:18:37 所属栏目:大数据 来源:网络整理
导读:我尝试用WMI阅读 Windows EventLog – Win32_NTEventlogFile.我使用工具“WMI Delphi Code Creator”中的示例代码( link to WMI tutorial) procedure TEventLogsForm.GetWin32_NTLogEventInfo;const WbemUser =''; WbemPassword =''; WbemComputer ='localho
我尝试用WMI阅读 Windows EventLog – > Win32_NTEventlogFile.我使用工具“WMI Delphi Code Creator”中的示例代码( link to WMI tutorial)

procedure TEventLogsForm.GetWin32_NTLogEventInfo;
const
  WbemUser            ='';
  WbemPassword        ='';
  WbemComputer        ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer,'rootCIMV2',WbemUser,WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NTLogEvent  Where Logfile="Application"','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1,FWbemObject,iValue) = 0 do
  begin
    try
      // ????
      if not VarIsNull(FWbemObject.Data) then
        Showmessage(IntToStr(Integer(FWbemObject.Data)));// Array of Uint8
      if not VarIsNull(FWbemObject.InsertionStrings) then
        Showmessage(String(FWbemObject.InsertionStrings));

    except
      on E:Exception do
      begin
        MessageDlg(E.Message,mtError,[mbOK],0);
      end;
    end;

    FWbemObject:=Unassigned;
  end;
end;

我尝试读取参数“FWbemObject.Data”和“FWbemObject.InsertionStrings”.
但我收到错误:类型的变体(数组变量)无法转换为类型(OleStr)

如何读取/显示此参数?

解决方法

根据文件发现 here,
Data和InsertionString是Byte / String的数组;

下面我用它在for循环中迭代它们,我不知道是否有任何意义,但你可以用作例子,做你需要的任何事情:).

procedure GetWin32_NTLogEventInfo;
const
  WbemUser            ='';
  WbemPassword        ='';
  WbemComputer        ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
  Insertion     : array of String;
  Data          : array of Byte;
  I: integer;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer,WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NTLogEvent Where Logfile=''Application''',iValue) = 0 do
  begin
    try

      if not VarIsNull(FWbemObject.Data) then
      begin
        Data := FWbemObject.Data;
        for I:= VarArrayLowBound(data,1) to VarArrayHighBound(data,1) do
          Showmessage(IntToStr(Data[I]));// Array of Uint8
      end;

      if not VarIsNull(FWbemObject.InsertionStrings) then
      begin
        Insertion := FWbemObject.InsertionStrings;            
        for I:= VarArrayLowBound(Insertion,1) to VarArrayHighBound(Insertion,1) do
          Showmessage(Insertion[I]);
      end;

    except
      on E:Exception do
      begin
        MessageDlg(E.Message,0);
      end;
    end;

    FWbemObject:=Unassigned;
  end;
end;

这个link有几个例子,但它是在VB中写的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读