Win32_NTEventlogFile 读取 Windows EventLog。我使用工具“WMI Delphi Code Creator”中的示例代码 ( link to-6ren">
gpt4 book ai didi

delphi - 我如何读取WMI参数 "Data"和 "InsertionStrings"?

转载 作者:行者123 更新时间:2023-12-03 15:27:05 26 4
gpt4 key购买 nike

我尝试使用 WMI -> Win32_NTEventlogFile 读取 Windows EventLog。我使用工具“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, 'root\CIMV2', 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”。但我收到错误:类型的变体 (Array Variant) 无法转换为类型 (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, 'root\CIMV2', 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
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, mtError, [mbOK], 0);
end;
end;

FWbemObject:=Unassigned;
end;
end;

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

关于delphi - 我如何读取WMI参数 "Data"和 "InsertionStrings"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16980599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com