profifrage: aktiven netzwerkadapter herausfinden ?

  • hallo meine guten :)
    ich stehe mal wieder vor einem ungelöstem problem:
    ich habe eine liste von all meinen netzwerkadaptern siehe bild:
    http://puu.sh/78cD

    ich bin mit meinem laptop ständig unterwegs und hänge mal am WLAN und mal
    über kabel am internet... ich frage mich ob es eine möglichkeit gibt, automatisch
    den netzwerkadapter herauszufinden, der gerade angeschlossen ist bzw über den
    meine daten fließen.

    weiss jemand rat ?

    Einmal editiert, zuletzt von WhiteLion (17. Oktober 2011 um 11:01)

    • Offizieller Beitrag

    Vielleicht hilft Dir ja diese Funktion:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $aAdapter = _CI_GetNetworkAdapter()
    ConsoleWrite(@error & @CR)
    _ArrayDisplay($aAdapter)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CI_GetNetworkAdapter($strComputer = '.')
    Local $aReturn[1][12] = [[ _
    'Hersteller:', 'Name:', 'Adapter-Typ:', 'Kennung:', _
    'MAC-Adresse:', 'IP-Adresse:', 'IP-Subnetzmaske:', 'Adresstyp:', _
    'DHCP-Server:', 'IP erhalten:', 'IP läuft ab:', 'Standardgateway:']]
    Local $x = 0, $objWMIService, $colItems, $colItems2
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus > 0', 'WQL', 0x30)
    If Not IsObj($colItems) Then Return SetError(2, 0, 0)
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][12]
    $aReturn[$x][0] = $objItem.Manufacturer
    $aReturn[$x][1] = $objItem.Name
    $aReturn[$x][2] = $objItem.AdapterType
    $aReturn[$x][3] = $objItem.NetConnectionID
    $aReturn[$x][4] = $objItem.MACAddress
    $colItems2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration', 'WQL', 0x30)
    If IsObj($colItems2) Then
    For $objItem2 In $colItems2
    If $objItem.Caption = $objItem2.Caption Then
    If $objItem2.IPEnabled = -1 Then
    $aReturn[$x][5] = $objItem2.IPAddress(0)
    $aReturn[$x][6] = $objItem2.IPSubnet(0)
    If $objItem2.DHCPEnabled = -1 Then
    $aReturn[$x][7] = 'von DHCP zugewiesen'
    $aReturn[$x][8] = $objItem2.DHCPServer
    $aReturn[$x][9] = _WMIDateStringToDate($objItem2.DHCPLeaseObtained)
    $aReturn[$x][10] = _WMIDateStringToDate($objItem2.DHCPLeaseExpires)
    Else
    $aReturn[$x][7] = 'Manuell konfiguriert'
    EndIf
    $aReturn[$x][11] = $objItem2.DefaultIPGateway(0)
    EndIf
    EndIf
    Next
    EndIf
    Next
    Return $aReturn
    EndFunc ;==>_CI_GetNetworkAdapter

    [/autoit] [autoit][/autoit] [autoit]

    Func _WMIDateStringToDate($dtmDate)
    Return (StringMid($dtmDate, 5, 2) & '/' & _
    StringMid($dtmDate, 7, 2) & '/' & StringLeft($dtmDate, 4) _
    & ' ' & StringMid($dtmDate, 9, 2) & ':' & StringMid($dtmDate, 11, 2) & ':' & StringMid($dtmDate, 13, 2))
    EndFunc ;==>_WMIDateStringToDate

    [/autoit]
    • Offizieller Beitrag

    Wenn du nur den Namen der Netzwerkverbindung, die verbunden ist, benötigst kannst du das auch so lösen:

    [autoit]

    #include <Constants.au3>
    Local $foo = Run(@ComSpec & " /c " & "netsh", "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
    StdinWrite($foo, "interface show interface" & @CRLF)
    StdinWrite($foo)

    [/autoit][autoit][/autoit][autoit]

    Local $data
    While True
    $data &= StdoutRead($foo)
    If @error Then ExitLoop
    Sleep(25)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    $ret = StringRegExp($data, 'Aktiviert\s+Verbunden\s+Dediziert\s+(\w+)', 3)
    For $i = 0 To UBound($ret) -1
    ConsoleWrite('Verbunden: ' & $ret[$i] & @CRLF)
    Next

    [/autoit]