Inno setup 收集数组中的mac地址并在此数组中找到特定值
我是初学者,需要你的帮助。 我尝试使用以下函数在数组中收集客户端的mac地址。以前定义的特定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
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';结束;谢谢你的帮助,这对我很有用。“它没有做”是相当模糊的。