如何得到本机的本地网卡连接速度!
在论坛上找了N个测试都有问题,写这样的程序主要是想用于网吧找哪些机器的网线不正常的,比如说是千M的网络,那台机器只跑到100M,说明网线有问题,作个记录,方便解决问题,但试了论坛上的几个程序,都有问题,我把网络取了,他还是1000M,明明是100M的网卡,得到的速度也是1000M,所以希望高手来指点一下啊! 从注册表获取的,测试了好几种网卡,都能正常判断。_NetworkAdapterInfo() 这个UDF我稍微改了下。最后一项就是网卡实际的速度了。#Include <Array.au3>
$NetworkAdapterInfo = _NetworkAdapterInfo()
_ArrayDisplay($NetworkAdapterInfo, "NetworkAdapterInfo")
Func GetSpeed($ID)
$NetKey = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}"
$i = 1
While 1
$Idx = RegEnumKey($NetKey,$i)
If @error Then ExitLoop
$Sid = RegRead($NetKey&"\"&$Idx,"NetCfgInstanceId")
If $Sid = $ID Then
$P = 1
While 1
$Params = RegEnumKey($NetKey&"\"&$Idx&"\Ndi",$P)
If @error Then ExitLoop
If StringInStr($Params,"Params") > 0 Then
$C = 1
While 1
$IN = RegEnumKey($NetKey&"\"&$Idx&"\Ndi\"&$Params,$C)
If @error Then ExitLoop
$Mode = RegRead($NetKey&"\"&$Idx&"\Ndi\"&$Params&"\"&$IN,"ParamDesc")
If (StringInStr($Mode,"速度") > 0 And StringInStr($Mode,"双工") > 0) Or _
(StringInStr($Mode,"speed") > 0 And StringInStr($Mode,"duplex") > 0) Or _
(StringInStr($Mode,"Media") > 0 And StringInStr($Mode,"Type") > 0) Or _
(StringInStr($Mode,"Connection") > 0 And StringInStr($Mode,"Type") > 0) Then
Dim $aSpeed
$aSpeed = 0
$X = 1
While 1
$SP = RegEnumVal($NetKey&"\"&$Idx&"\Ndi\params\"&$IN&"\enum",$X)
If @error then ExitLoop
$SPTEMP = RegRead($NetKey&"\"&$Idx&"\Ndi\params\"&$IN&"\enum",$SP)
$Speed = GetNo($SPTEMP)
If $Speed <> "" then
_ArrayAdd($aSpeed, $Speed)
EndIf
$X = $X + 1
WEnd
Return _ArrayMax($aSpeed)
EndIf
$C = $C + 1
WEnd
EndIf
$P = $P + 1
WEnd
EndIf
$i = $i + 1
WEnd
Return 0
EndFunc
Func GetNo($ZHI)
$Exp = StringRegExp($ZHI, "\d+.\d+|\d+", 1)
If Not @error Then
If StringInStr($Exp,".") > 0 then
Return $Exp * 1000
Else
Return $Exp
EndIf
Else
Return ""
EndIf
EndFunc
Func _NetworkAdapterInfo()
;======================================================
;
; 函数名称: _NetworkAdapterInfo()
; 详细信息: 获取系统所有网卡信息
; 返回值说明:
; 以二维数组方式返回.例如 $info=_NetworkAdapterInfo()
; $info 网卡数量
; $info 第一块网卡的标志1
; $info 第一块网卡的状态
; 状态说明:7为网卡未插网线,2为网卡连接正常
; $info 第一块网卡的网卡名称
; $info 第一块网卡的连接名称
; $info 第一块网卡的MAC地址
; $info 第一块网卡的IP地址
; $info 第一块网卡的最高速度
; 第二块网卡:
; $info 第二块网卡的标志1
; $info 第二块网卡的最高速度
; 其他网卡信息依次类推。。。
; 注意,此UDF不会获取已经禁用的网卡。
; 作者: Sanhen (gxbeiliu@163.com)
; 网站: www.lunhui.net.cnwww.autoitx.com
;======================================================
Local $colItem
Local $objItem
Local $colItems
Local $objItems
Local $objWMIService
Local $Adapters
$Adapters = 0
$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItem = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus >0", "WQL", 0x30)
If IsObj($colItem) Then
For $objItem In $colItem
If $objItem.MACAddress = "00:00:00:00:00:00" Then ContinueLoop
$Adapters += 1
ReDim $Adapters
$Adapters[$Adapters] += $Adapters
$Adapters[$Adapters] = $objItem.NetConnectionStatus
$Adapters[$Adapters] = $objItem.Description
$Adapters[$Adapters] = $objItem.NetConnectionID
$Adapters[$Adapters] = $objItem.MACAddress
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration WHERE MACAddress = "' & $Adapters[$Adapters] & '" And IPEnabled = True ', "WQL", 0x30)
If IsObj($colItems) Then
For $objItems In $colItems
;if $objItem1.IPAddress(0) = "0.0.0.0" Then ContinueLoop
$Adapters[$Adapters] = $objItems.IPAddress(0)
$Adapters[$Adapters] = $objItems.SettingID
$Adapters[$Adapters] = GetSpeed($objItems.SettingID)
Next
EndIf
Next
EndIf
Return $Adapters
EndFunc ;==>_NetworkAdapterInfo 再发一个给你试试。#Include <Array.au3>
$NetKey = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}"
$i = 1
While 1
$ID = RegEnumKey($NetKey,$i)
If @error <> 0 then ExitLoop
$o = 1
While 1
$IN = RegEnumKey($NetKey&"\"&$ID&"\Ndi\params",$o)
If @error <> 0 then ExitLoop
$Mode = RegRead($NetKey&"\"&$ID&"\Ndi\params\"&$IN,"ParamDesc")
If (StringInStr($Mode,"速度") > 0 And StringInStr($Mode,"双工") > 0) Or _
(StringInStr($Mode,"speed") > 0 And StringInStr($Mode,"duplex") > 0) Or _
(StringInStr($Mode,"Media") > 0 And StringInStr($Mode,"Type") > 0) Or _
(StringInStr($Mode,"Connection") > 0 And StringInStr($Mode,"Type") > 0) Then
Dim $aSpeed
$aSpeed = RegRead($NetKey&"\"&$ID,"DriverDesc")
$Sid = RegRead($NetKey&"\"&$ID,"NetCfgInstanceId")
$Name = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\"&$Sid&"\Connection","Name")
$aSpeed = $Name
$aSpeed = 0
$x = 1
While 1
$SP = RegEnumVal($NetKey&"\"&$ID&"\Ndi\params\"&$IN&"\enum",$x)
If @error then ExitLoop
$SPTEMP = RegRead($NetKey&"\"&$ID&"\Ndi\params\"&$IN&"\enum",$SP)
$Speed = GetNo($SPTEMP)
If $Speed <> "" then
_ArrayAdd($aSpeed, $Speed)
EndIf
$x = $x + 1
WEnd
MsgBox(0,"",$aSpeed&@CR&$aSpeed&": "&_ArrayMax($aSpeed,2)&" M")
;_ArrayDisplay($aSpeed, "")
EndIf
$o = $o + 1
WEnd
$i = $i + 1
WEnd
Func GetNo($ZHI)
$Exp = StringRegExp($ZHI, "\d+.\d+|\d+", 1)
If Not @error Then
If StringInStr($Exp,".") > 0 then
Return $Exp * 1000
Else
Return $Exp
EndIf
Else
Return ""
EndIf
EndFunc
又当前的下载速度没,呵呵 先做记号,指不定什么时候用得上。。 做记号,说不定什么时候用得上。。
页:
[1]