找回密码
 加入
搜索
查看: 2683|回复: 1

[网络通信] 关于读网卡信息中的代码问题?

[复制链接]
发表于 2010-7-16 10:37:43 | 显示全部楼层 |阅读模式
当获得第1块网卡信息后,对这句重新调整网卡的数量不是很理解:
$AdaptersInfo[$AdaptersInfo[0][0]][0] += $AdaptersInfo[0][0] ;网卡的数量?
大家能帮助讲解一下吗?
#cs
编写本脚本收获:
对有”教训“的要特别注意
1.原作者没有使用$KeyValue变量表示注册表键名,书写繁琐且不易于代码版面清晰;
2.掌握了用RegEnumKey()枚举指定键;
#ce
#include <Array.au3>
$AdaptersInfo = _RegNetworkAdapterInfo();用_RegNetworkAdapterInfo()函数将所有网卡信息读到一个数组里
_ArrayDisplay($AdaptersInfo);将数组中的网卡信息用列表视图显示出来

Func _RegNetworkAdapterInfo()
        Local $AdaptersInfo[10][5];定义一个数组变量
        $AdaptersInfo[0][0] = 0;定义网卡初始信息为空
                Dim $KeyValue="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"
        For $i = 1 To 50
                $Adapters = RegEnumKey($KeyValue, $i)
                                ;读取指定子键的名称,语法为RegEnumKey ( "键名", 序数 ) 
                If @error <> 0 Then ExitLoop;读取出错退出循环
                $IPAddress = RegRead($KeyValue & "" & $Adapters, "IPAddress") 
                                ;静态IP的地址
                $SubnetMask = RegRead($KeyValue & "" & $Adapters, "SubnetMask") 
                                ;静态IP的子网掩码
                $AdaptersInfo[0][0] += 1 ;网卡的数量
                ReDim $AdaptersInfo[UBound($AdaptersInfo) + 1][5]
                                ;ReDim是调整已经存在数组的大小,网卡信息位于1维
                                ;UBound是返回数组纬度的大小,语法为UBound ( 数组 [, 维度] ) 
                $AdaptersInfo[$AdaptersInfo[0][0]][0] += $AdaptersInfo[0][0] ;网卡的数量
                                ;以上可不可以理解为$AdaptersInfo[$i][0]=$AdaptersInfo[$i][0]+$AdaptersInfo[0][0]
                                ;$AdaptersInfo[$AdaptersInfo[0][0]][0]=$AdaptersInfo[$AdaptersInfo[0][0]][0]+$AdaptersInfo[0][0]
                $AdaptersInfo[$AdaptersInfo[0][0]][1] = $IPAddress ;IP的地址
                $AdaptersInfo[$AdaptersInfo[0][0]][2] = $SubnetMask ;IP的掩码
        Next
        Return $AdaptersInfo
EndFunc   ;==>_RegNetworkAdapterInfo
发表于 2010-7-16 14:16:10 | 显示全部楼层
本帖最后由 ferelove 于 2010-7-16 14:29 编辑

每读取一个子键它就+1,当循环结束(即是全部子键都枚举完时),也就是网卡的数量,一般情况下,每个子键代表一个网络设备,不过有些并不是真正的网卡,自己可以加以条件过滤,譬如IP是0.0.0.0的不要,等等。
当网卡未连接状态或者未分配到IP时,IPAddress都是0.0.0.0。
还有一些键值可以应用的,灵活处理。譬如EnableDHCP键值=1时,IP地址和掩码取DhcpIPAddress和DhcpSubnetMask。

之前用此方法获取网卡信息(IP地址、子网掩码、网关、DNS等等),在XP下挺好用的,在WIN7有某些键值已经不存在,故在WIN7下,此方法不理想咯。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 14:56 , Processed in 0.077291 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表