【发布时间】:2017-12-17 17:03:47
【问题描述】:
我是初学者,需要您的帮助。 我正在尝试使用以下函数在数组中收集客户端的 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_NetworkAdapterConfiguration'
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 地址保存在数组中?除了在列表中搜索“先前定义的地址”之外,您想对它们做任何事情吗?
-
你试图编辑我的答案,而不是评论。你的帖子是:你好,对不起我的英语我仍然不明白如何使用上面的函数来确定我的 Macadress。例如,我的电脑有三个 nic,地址如下(nic01=XXX,nic02=YYY,nic03=ZZZ)。如何将指定的 Mac 地址例如 nic02 保存在变量 (myVar) 中,以便最后 myVar = YYY.
-
那不是,你有什么要求!您的问题是关于“收集 MAC 地址数组”。我很确定你不需要任何数组,因为它没有任何意义。因此,我在第一条评论中提出了问题。你从来没有回应过!你显然有XY problem。因此,请编辑您的问题以询问您需要什么,而不是询问您认为您需要以实现您真正需要的内容。
-
如果您在 Windows 命令行上执行此操作会得到什么:
powershell -command "Get-WmiObject -Query 'select * from Win32_NetworkAdapterConfiguration'" -
对不起,如果我不准确。
标签: inno-setup