如何或得所有网卡的ID?(已解决)
本帖最后由 viplight 于 2010-3-21 15:38 编辑_LanID()
Func _LanID()
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
;得到当前活动网卡ID
$colItems = $objWMIService.ExecQuery("Select * from Win32_TSNetworkAdapterListSetting")
For $Item in $colItems
$AdapterID = $Item.NetworkAdapterID
Next
MsgBox(0,"",$AdapterID )
EndFunc
上面的代码只能获取活动网卡的ID
有没有获取所有网卡ID的函数?
高手些指点指点...........
非常感谢各位的鼎立帮助与支持,我现在晓得怎么获取到所有活动网卡的ID了我回头好好再研究研究
我所获取的代码是由二楼所说的用ACN自带的WMI获取工具得到的
代码如下$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output=""
$Output = $Output & "Computer: " & $strComputer& @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_TSNetworkAdapterListSetting", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$Output = $Output & "Caption: " & $objItem.Caption & @CRLF
$Output = $Output & "Description: " & $objItem.Description & @CRLF
$Output = $Output & "NetworkAdapterID: " & $objItem.NetworkAdapterID & @CRLF
$Output = $Output & "SettingID: " & $objItem.SettingID & @CRLF
$Output = $Output & "TerminalName: " & $objItem.TerminalName & @CRLF
$Output = $Output & "TerminalProtocol: " & $objItem.TerminalProtocol & @CRLF
$Output = $Output & "Transport: " & $objItem.Transport & @CRLF
if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
$Output=""
Next
Else
Msgbox(0,"WMI 输出","No WMI Objects Found for class: " & "Win32_TSNetworkAdapterListSetting" )
Endif 本帖最后由 lynfr8 于 2010-3-20 18:33 编辑
MsgBox(0,"test",_GetNetwork())
Func _GetNetWork()
Local $wbemFlagReturnImmediately,$wbemFlagForwardOnly
Local $network,$strComputer,$objWMIService,$colItems
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$network=""
$strComputer = "localhost"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter where NetConnectionStatus =2", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
;NetConnectionStatus =2 获取系统中所有活动网卡
;NetConnectionStatus >0 获取系统中的除了禁用之外的网卡(即拔了网线的网卡和活动中的网卡)
If IsObj($colItems) then
For $objItem In $colItems
$network= $network&$objItem.Name&@CRLF
Next
EndIf
Return $network
EndFunc
参考一下以下文章
http://www.autoitx.com/forum.php?mod=viewthread&tid=5651&highlight=%5C_NetworkAdapterInfo%2B
http://www.autoitx.com/forum.php?mod=viewthread&tid=11935&highlight=%5C_NetworkAdapterInfo%2B 谢谢分享!!学习了!! 回复 2# lynfr8
这个函数我用过了的但是还是不能获取网卡在注册表中的ID
我的意思是比如机器我有两张网卡
两张都是Realtek RTL8169/8110 Family Gigabit Ethernet NIC
我选中了一张再找到指定网卡的ID有没得办法实现。。。。。。
获取这个ID,可以直接用WMI,也可以查注册表,但遍历网卡用WMI简单些,所以可以搭配使用
你用中文的AUTOIT自带程序去查查具体WMI,关于网卡的,有好几个呢,2楼那个就非常适合查网卡的状态,但获取的网卡信息会少些,可以根据信息查注册表。。 刚好自己的代码里有现成的。
返回索引值可以用WMI的 "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE Index = " 来操作,它也等于注册表键 HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318} 下的子键。#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
MsgBox(0, "当前选择网卡索引", '[' & NICIndex() & ']')
Exit
Func NICIndex()
Local $aIfTable, $iNICIndex
$aIfTable = _GetNetInfo()
If $aIfTable = 0 Then
MsgBox(0x10, "错误", "获取网络适配器设置失败,请检查网卡驱动。")
Exit 2
ElseIf $aIfTable = 1 Then
$iNICIndex = $aIfTable
Else
; 创建“网卡选择”窗口
Local $hNICWnd, $hOKButton, $hIfTable
$hNICWnd = GUICreate("测试" & " - 网卡选择", 284, 118)
GUICtrlCreateLabel("检测到本机安装有多个网络适配器,请选择用于更新的网卡。", 16, 16, 252, 24)
$hIfTable = GUICtrlCreateCombo("", 16, 48, 252, 12 * $aIfTable, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
For $i = 1 To $aIfTable
GUICtrlSetData(-1, $aIfTable[$i] & ". " & $aIfTable[$i])
Next
GUICtrlSetData(-1, $aIfTable & ". " & $aIfTable)
$hOKButton = GUICtrlCreateButton("确定(&O)", 104, 80, 76, 22, $BS_DEFPUSHBUTTON)
; 窗口事件
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $hOKButton, $GUI_EVENT_CLOSE
$iNICIndex = GUICtrlRead($hIfTable)
ExitLoop
EndSwitch
WEnd
GUIDelete($hNICWnd)
$iNICIndex = StringLeft($iNICIndex, StringInStr($iNICIndex, ".") - 1)
EndIf
Return $iNICIndex
EndFunc ;==>NICIndex
;===============================================================================
; 说明: 获取网络适配器信息
; 语法: _GetNetInfo([$strComputer = "localhost"])
; 参数: $strComputer - [可选] 计算机名称
; 需要: WMI 服务
; 返回: 成功 - 二维数组, 结构:
; $array - 网络适配器总数
; $array - 第一网络适配器索引
; $array - 第一网络适配器名称
; $array - 第一网络适配器连接名
; $array - 第一网络适配器连接状态
; $array - 第一网络适配器MAC地址
; $array - 第一网络适配器DHCP状态
; $array - 第一网络适配器IP地址
; $array - 第一网络适配器子网掩码
; $array - 第一网络适配器默认网关
; $array - 第一网络适配器首选 DNS
; $array - 第一网络适配器备用 DNS
; ...
; 至 - 第 n 网络适配器信息
; 失败 - 空列表数组 = 0, 并设置 @error 到
; 1 - 没有可用网络适配器
; 2 - 获取 COM 对象失败
; 备注: 无
;===============================================================================
Func _GetNetInfo($strComputer = "localhost")
Local $objWMIService, $colItems, $objItem, $iItem, $aNetInfo = []
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
If @error Then Return SetError(2, 0, $aNetInfo)
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
For $objItem In $colItems
$aNetInfo += 1
$iItem = $aNetInfo
ReDim $aNetInfo[$iItem + 1]
$aNetInfo[$iItem] = $objItem.Index
$aNetInfo[$iItem] = $objItem.Description
$aNetInfo[$iItem] = $objItem.MACAddress
$aNetInfo[$iItem] = $objItem.DHCPEnabled
$aNetInfo[$iItem] = $objItem.IPAddress(0)
$aNetInfo[$iItem] = $objItem.IPSubnet(0)
$aNetInfo[$iItem] = $objItem.DefaultIPGateway(0)
$aNetInfo[$iItem] = $objItem.DNSServerSearchOrder(0)
$aNetInfo[$iItem] = $objItem.DNSServerSearchOrder(1)
If NOT StringRegExp($aNetInfo[$iItem], "^({2}:){5}{2}$") _
Then $aNetInfo[$iItem] = ""
If $aNetInfo[$iItem] Then $aNetInfo[$iItem] = 1
If NOT StringRegExp($aNetInfo[$iItem], "^((25|2\d|?\d?\d)\.){3}(25|2\d|?\d?\d)$") _
Then $aNetInfo[$iItem] = ""
If NOT StringRegExp($aNetInfo[$iItem], "^((25|2\d|?\d?\d)\.){3}(25|2\d|?\d?\d)$") _
Then $aNetInfo[$iItem] = ""
If NOT StringRegExp($aNetInfo[$iItem], "^((25|2\d|?\d?\d)\.){3}(25|2\d|?\d?\d)$") _
Then $aNetInfo[$iItem] = ""
If NOT StringRegExp($aNetInfo[$iItem], "^((25|2\d|?\d?\d)\.){3}(25|2\d|?\d?\d)$") _
Then $aNetInfo[$iItem] = ""
If NOT StringRegExp($aNetInfo[$iItem], "^((25|2\d|?\d?\d)\.){3}(25|2\d|?\d?\d)$") _
Then $aNetInfo[$iItem] = ""
Next
EndIf
If $aNetInfo = 0 Then Return SetError(1, 0, $aNetInfo)
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE AdapterType = 'Ethernet 802.3'", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
For $objItem In $colItems
For $i = 1 To $aNetInfo
If $aNetInfo[$i] = $objItem.Index Then
$aNetInfo[$i] = $objItem.Description
$aNetInfo[$i] = $objItem.NetConnectionID
$aNetInfo[$i] = $objItem.NetConnectionStatus
ExitLoop
EndIf
Next
Next
EndIf
Return $aNetInfo
EndFunc ;==>_GetNetInfo
页:
[1]