Inno setup 收集数组中的mac地址并在此数组中找到特定值

Inno setup 收集数组中的mac地址并在此数组中找到特定值,inno-setup,Inno Setup,我是初学者,需要你的帮助。 我尝试使用以下函数在数组中收集客户端的mac地址。以前定义的特定mac地址应检入数组,如果找到,则保存在变量中 function WbemQuery(WbemServices: Variant; Query: string): Variant; var WbemObjectSet: Variant; begin Result := Null; WbemObjectSet := WbemServices.ExecQuery(Query); if not

我是初学者,需要你的帮助。 我尝试使用以下函数在数组中收集客户端的mac地址。以前定义的特定mac地址应检入数组,如果找到,则保存在变量中

function WbemQuery(WbemServices: Variant; Query: string): Variant;
var
  WbemObjectSet: Variant;
begin
  Result := Null;
  WbemObjectSet := WbemServices.ExecQuery(Query);
  if not VarIsNull(WbemObjectSet) and (WbemObjectSet.Count > 0) then
  begin
    Result := WbemObjectSet.ItemIndex(0);
  end;
end;

procedure CollectInformation;
var
  Query: string;
  WbemLocator, WbemServices: Variant;
  ComputerSystem, OperatingSystem, Processor, NetworkAdapters, NetworkAdapter: Variant;
  IPAddresses: array of string;
  I, I2: Integer;
begin
  WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  WbemServices := WbemLocator.ConnectServer('.', 'root\CIMV2');

  Query :='SELECT IPEnabled, IPAddress, MACAddress FROM Win32_NetworkAdapterConfiguration';
  NetworkAdapters := WbemServices.ExecQuery(Query);
  if not VarIsNull(NetworkAdapters) then
  begin
    for I := 0 to NetworkAdapters.Count - 1 do
    begin
      NetworkAdapter := NetworkAdapters.ItemIndex(I);
      if (not VarIsNull(NetworkAdapter.MACAddress)) and NetworkAdapter.IPEnabled then
      begin
        Log(Format('Adapter %d MAC=%s', [I, NetworkAdapter.MACAddress]));
        if not VarIsNull(NetworkAdapter.IPAddress) then
        begin
          IPAddresses := NetworkAdapter.IPAddress;
          for I2 := 0 to GetArrayLength(IPAddresses) - 1 do
          begin
            Log(Format('Adapter %d IP %d=%s', [I, I2, IPAddresses[I2]]));
          end;
        end;
      end;
    end;
  end;
end;
谢谢你的帮助 问候


在Windows命令行上执行此操作时,我得到了以下列表:
powershell-command Get WmiObject-Query“select*from Win32\u networkadapter配置”

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : RasSstp
Description      : WAN Miniport (SSTP)
Index            : 0

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : RasAgileVpn
Description      : WAN Miniport (IKEv2)
Index            : 1

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : Rasl2tp
Description      : WAN Miniport (L2TP)
Index            : 2

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : PptpMiniport
Description      : WAN Miniport (PPTP)
Index            : 3

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : RasPppoe
Description      : WAN Miniport (PPPOE)
Index            : 4

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : NdisWan
Description      : WAN Miniport (IPv6)
Index            : 5

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : NdisWan
Description      : WAN Miniport (Network Monitor)
Index            : 6

DHCPEnabled      : True
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : e1express
Description      : Intel(R) 82566DM-2-Gigabit-Netzwerkverbindung
Index            : 7

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : NdisWan
Description      : WAN Miniport (IP)
Index            : 8

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : tunnel
Description      : Microsoft-ISATAP-Adapter
Index            : 9

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : AsyncMac
Description      : RAS Async Adapter
Index            : 10

DHCPEnabled      : True
IPAddress        : {192.168.178.65, fe80::39c2:13d2:50ce:82c1, 2a02:8070:d296:f900:39c2:13d2:50ce:82c1, 2a02:8070:c1a8:aa00:ad48:fe3a:543c:1bc...}
DefaultIPGateway : {192.168.178.1, fe80::2665:11ff:fe2b:3ddc}
DNSDomain        : fritz.box
ServiceName      : netr7364
Description      : AirPlus G DWL-G122-Drahtlos-USB-Adapter(rev.C)
Index            : 11

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : tunnel
Description      : Microsoft-Teredo-Tunneling-Adapter
Index            : 12

DHCPEnabled      : False
IPAddress        :
DefaultIPGateway :
DNSDomain        :
ServiceName      : tunnel
Description      : Microsoft-ISATAP-Adapter
Index            : 13

此功能检查系统是否具有指定的MAC:

函数CheckMAC(MAC:string):布尔值;
变量
查询:字符串;
WbemLocator,WbemServices:变量;
NetworkAdapters,NetworkAdapter:变量;
I:整数;
开始
WbemLocator:=CreateOleObject('WbemScripting.SWbemLocator');
WbemServices:=WbemLocator.ConnectServer('.','root\CIMV2');
结果:=假;
查询:=“从Win32_NetworkAdapterConfiguration中选择MACAddress”;
NetworkAdapters:=WbemServices.ExecQuery(查询);
如果不是VarisAll(网络适配器),则
开始
对于I:=0到NetworkAdapters。计数-1 do
开始
NetworkAdapter:=NetworkAdapters.ItemIndex(I);
如果不是VarisAll(NetworkAdapter.MACAddress),则
开始
日志(格式('Adapter%d MAC=%s',[I,NetworkAdapter.MACAddress]);
如果NetworkAdapter.MACAddress=MAC,则
开始
结果:=真;
打破
结束;
结束;
结束;
结束;
结束;

您可以像这样使用它:

MAC:=GetMACAddress;
如果选中MAC(MAC),则
开始
日志(格式('Found MAC%s',[MAC]);
结束
其他的
开始
日志(格式('MAC%s未找到',[MAC]);
结束;

(其中
GetMACAddress
是您的外部函数)

“如果找到,则保存在变量中”-您希望在变量中保存什么?真/假=找到/未找到?还是怎样为什么要将MAC地址保存在阵列中?除了在列表中搜索“以前定义的地址”之外,您还想对它们做些什么吗?您试图编辑我的答案,而不是评论。你的帖子是:你好,对不起我的英语,我仍然不明白如何使用上面的函数来确定我的Macadress。e、 g我的电脑有三个nic,地址如下(nic01=XXX,nic02=YYY,nic03=ZZZ)。我如何将指定的Mac地址(例如nic02)保存在变量(myVar)中,以便在结尾处myVar=YYY。这不是您的要求!你的问题是关于“收集MAC地址数组”。我很确定您不需要任何数组,因为它没有任何意义。因此,我在第一条评论中提出了问题。你从来没有回应过!你显然有。因此,编辑您的问题以询问您需要什么,而不是您认为需要什么来实现您真正需要的。如果在Windows命令行上执行此操作,您会得到什么:
powershell-command“get WmiObject-Query‘select*from Win32_networkadapter配置’”
如果我不准确,很抱歉。我试图根据函数CheckMac(MAC)的返回值设置变量EntValue01,如下所示。它不起作用。是否可以通过这种方式设置此变量?MAC:=“00:19:5b:7b:3b:7d”;如果选中MAC(MAC),则开始EntValue01:='00195b7b3b7d';'end else begin EntValue01:='xxx';结束;谢谢你的帮助,这对我很有用。“它没有做”是相当模糊的。