找回密码
 加入
搜索
查看: 5044|回复: 5

[系统综合] 如何或得所有网卡的ID?(已解决)

  [复制链接]
发表于 2010-3-20 05:46:20 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2010-3-20 14:32:53 | 显示全部楼层
本帖最后由 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

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-3-20 15:09:09 | 显示全部楼层
谢谢分享!!学习了!!
 楼主| 发表于 2010-3-21 02:12:24 | 显示全部楼层
回复 2# lynfr8


    这个函数我用过了的但是还是不能获取网卡在注册表中的ID
我的意思是比如机器我有两张网卡
两张都是  Realtek RTL8169/8110 Family Gigabit Ethernet NIC
我选中了一张再找到指定网卡的ID有没得办法实现。。。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-3-21 07:39:03 | 显示全部楼层
获取这个ID,可以直接用WMI,也可以查注册表,但遍历网卡用WMI简单些,所以可以搭配使用

你用中文的AUTOIT自带程序去查查具体WMI,关于网卡的,有好几个呢,2楼那个就非常适合查网卡的状态,但获取的网卡信息会少些,可以根据信息查注册表。。
发表于 2010-3-21 09:05:28 | 显示全部楼层
刚好自己的代码里有现成的。
返回索引值可以用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][0] = 0 Then
                MsgBox(0x10, "错误", "获取网络适配器设置失败,请检查网卡驱动。")
                Exit 2
        ElseIf $aIfTable[0][0] = 1 Then
                $iNICIndex = $aIfTable[1][0]
        Else
                ; 创建“网卡选择”窗口
                Local $hNICWnd, $hOKButton, $hIfTable

                $hNICWnd = GUICreate("测试" & " - 网卡选择", 284, 118)

                GUICtrlCreateLabel("检测到本机安装有多个网络适配器,请选择用于更新的网卡。", 16, 16, 252, 24)
                $hIfTable = GUICtrlCreateCombo("", 16, 48, 252, 12 * $aIfTable[0][0], BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
                For $i = 1 To $aIfTable[0][0]
                        GUICtrlSetData(-1, $aIfTable[$i][0] & ". " & $aIfTable[$i][1])
                Next
                GUICtrlSetData(-1, $aIfTable[1][0] & ". " & $aIfTable[1][1])

                $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[0][0] - 网络适配器总数
;         $array[1][0] - 第一网络适配器索引
;         $array[1][1] - 第一网络适配器名称
;         $array[1][2] - 第一网络适配器连接名
;         $array[1][3] - 第一网络适配器连接状态
;         $array[1][4] - 第一网络适配器MAC地址
;         $array[1][5] - 第一网络适配器DHCP状态
;         $array[1][6] - 第一网络适配器IP地址
;         $array[1][7] - 第一网络适配器子网掩码
;         $array[1][8] - 第一网络适配器默认网关
;         $array[1][9] - 第一网络适配器首选 DNS
;         $array[1][10] - 第一网络适配器备用 DNS
;         ...
;         [n][0] 至 [n][10] - 第 n 网络适配器信息
;         失败 - 空列表数组 [0][0] = 0, 并设置 @error 到
;            1 - 没有可用网络适配器
;            2 - 获取 COM 对象失败
; 备注:   无
;===============================================================================
Func _GetNetInfo($strComputer = "localhost")
        Local $objWMIService, $colItems, $objItem, $iItem, $aNetInfo[1][11] = [[0]]

        $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[0][0] += 1
                        $iItem = $aNetInfo[0][0]
                        ReDim $aNetInfo[$iItem + 1][11]

                        $aNetInfo[$iItem][0] = $objItem.Index
                        $aNetInfo[$iItem][1] = $objItem.Description
                        $aNetInfo[$iItem][4] = $objItem.MACAddress
                        $aNetInfo[$iItem][5] = $objItem.DHCPEnabled
                        $aNetInfo[$iItem][6] = $objItem.IPAddress(0)
                        $aNetInfo[$iItem][7] = $objItem.IPSubnet(0)
                        $aNetInfo[$iItem][8] = $objItem.DefaultIPGateway(0)
                        $aNetInfo[$iItem][9] = $objItem.DNSServerSearchOrder(0)
                        $aNetInfo[$iItem][10] = $objItem.DNSServerSearchOrder(1)

                        If NOT StringRegExp($aNetInfo[$iItem][4], "^([0-9A-F]{2}:){5}[0-9A-F]{2}$") _
                                        Then $aNetInfo[$iItem][4] = ""
                        If $aNetInfo[$iItem][5] Then $aNetInfo[$iItem][5] = 1
                        If NOT StringRegExp($aNetInfo[$iItem][6], "^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$") _
                                        Then $aNetInfo[$iItem][6] = ""
                        If NOT StringRegExp($aNetInfo[$iItem][7], "^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$") _
                                        Then $aNetInfo[$iItem][7] = ""
                        If NOT StringRegExp($aNetInfo[$iItem][8], "^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$") _
                                        Then $aNetInfo[$iItem][8] = ""
                        If NOT StringRegExp($aNetInfo[$iItem][9], "^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$") _
                                        Then $aNetInfo[$iItem][9] = ""
                        If NOT StringRegExp($aNetInfo[$iItem][10], "^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$") _
                                        Then $aNetInfo[$iItem][10] = ""
                Next
        EndIf
        If $aNetInfo[0][0] = 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[0][0]
                                If $aNetInfo[$i][0] = $objItem.Index Then
                                        $aNetInfo[$i][1] = $objItem.Description
                                        $aNetInfo[$i][2] = $objItem.NetConnectionID
                                        $aNetInfo[$i][3] = $objItem.NetConnectionStatus
                                        ExitLoop
                                EndIf
                        Next
                Next
        EndIf

        Return $aNetInfo
EndFunc   ;==>_GetNetInfo

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2025-1-12 06:55 , Processed in 0.077488 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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