Skript performanter gestalten

  • Hallo zusammen,

    hat jemand eine Idee wie ich die Skriptabfrage der Netzwerkadapter performanter (schneller) gestalten kann..
    Die Verwendung von "@IPAdress1 usw." kommt nicht in Frage da sich im System mehr als 4 Netzwerkkarten befinden

    (VMWare etc.)


    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Local $msg, $Input1, $Input2, $Beenden

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

    #Region ### START Koda GUI section ### Form=
    GUICreate("Form1", 263, 187, 390, 114)
    $Input1 = GUICtrlCreateInput(GetIP("LAN-Verbindung"), 112, 28, 105, 21)
    $Input2 = GUICtrlCreateInput(GetIP("Drahtlose Netzwerkverbindung"), 112, 69, 105, 21)
    GUICtrlCreateLabel("LAN IP Adresse", 16, 32, 79, 17)
    GUICtrlCreateLabel("WLAN IP Adresse", 16, 72, 90, 17)
    $Beenden = GUICtrlCreateButton("Beenden", 40, 120, 177, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE or $msg = $Beenden
    ExitLoop
    EndSelect

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

    WEnd
    Func GetIP($AdapterName)
    Local $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2'), $Output = 0
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    Local $colItems2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration', 'WQL', 0x30)
    If IsObj($colItems2) Then
    For $objItem2 In $colItems2
    If $objItem.Caption = $objItem2.Caption Then
    If $objItem.NetConnectionID = $AdapterName Then
    $Output = $objItem2.IPAddress(0)
    EndIf
    EndIf
    Next
    EndIf
    Next
    EndIf
    Return $Output
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Apocsis (7. Oktober 2009 um 11:47)

  • Hallo,
    das einzige was mir einfällt, wäre eine Consolenausgabe von netsh oder ipconfig nach den IP-Adressen bzw Adaptern zu durchforsten. Das sollte aber auch in kürzester Zeit erledigt sein. Deine Variante dauert auf meinem Rechner mit 3 Netzwerkadaptern 8 Sekunden!
    ciao
    Andy

  • Du könntest es mal hiermit versuchen:

    Spoiler anzeigen
    [autoit]

    ;######################################################################################################
    ;# Function Name: _GetAllNetAdapterInfo()
    ;# Description:: Auslesen aller vorhandenen Netzwerkadapter und deren Konfiguration
    ;# Parameter(s): keine
    ;# Requirement(s): keine
    ;# Return Value(s): Erfolg Array[0][0] Anzahl der Adapter
    ;# Array[n][0] Adapter Name (wie in Systemsteuerung ==> Netzwerkverbindungen)
    ;# Array[n][1] Adapter Beschreibung
    ;# Array[n][2] IP-Adresse
    ;# Array[n][3] SubNetMask
    ;# Array[n][4] DHCP-Enabled (0/1)
    ;# Array[n][5] DHCP IP-Adresse
    ;# Array[n][6] DHCP SubNetMask
    ;# Array[n][7] DHCP Default Gateway
    ;# Array[n][8] DHCP Server
    ;# Fehler Array[0][0] Leerstring (kein Adapter vorhanden)
    ;# Author(s): Bitboy, nach einer Idee von BugFix ([email='bugfix@autoit.de'][/email])
    ;######################################################################################################
    Func _GetAllNetAdapterInfo ()
    Local $infoarr[1][9], $keyarr[1], $i=0, $x=0, $counter=0, $tmp, $tmp2, $short

    ;Registrierte Adapter zählen
    While 1
    $i = $i + 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services", $i)
    If @error <> 0 then ExitLoop

    ;Adapter sind in den einzigen Schlüsseln die mit "{" beginnen
    If StringInStr($tmp,"{") Then
    $short = 1 ;Merker zum Verkürzen der Schleife da Keys alphabetisch sortiert
    $counter = $counter + 1
    Redim $keyarr[$counter+1]
    $keyarr[$counter] = $tmp ;Speichern der Adapterschlüssel
    $keyarr[0] = $counter
    Else
    If $short = 1 Then ExitLoop
    EndIf
    WEnd

    ;Funktion verlassen wenn kein Adapter gefunden wurde
    If $counter = 0 Then
    $infoarr[0][0] = 0
    Return $infoarr
    EndIf

    ;Rückgabearray an Adapterzahl anpassen
    Redim $infoarr[$counter+1][9]
    $infoarr[0][0] = $counter

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

    ; TCP-Informationen auslesen
    For $i = 1 to $counter
    $infoarr[$i][2] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'IPAddress')
    $infoarr[$i][3] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'SubnetMask')
    $infoarr[$i][4] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'EnableDHCP')
    $infoarr[$i][5] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpIPAddress')
    $infoarr[$i][6] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpSubnetMask')
    $infoarr[$i][7] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpDefaultGateway')
    $infoarr[$i][8] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpServer')
    Next

    ;Adapternamen auslesen
    $i = 1
    $short = 0
    While 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}",$i)
    If @error <> 0 then ExitLoop

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

    $tmp2 = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "NetCfgInstanceId")
    For $x = 1 To $counter

    ;Zugeordnete Verbindung auslesen
    $infoarr[$x][1] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\' & $keyarr[$x] & '\Connection', 'Name')
    If $tmp2 = $keyarr[$x] Then
    $infoarr[$x][0] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "DriverDesc")
    $short = $short +1 ;gefundene Namen zählen
    EndIf
    Next

    If $short = $counter Then ExitLoop ;Alle Adapternamen gefunden

    $i = $i +1
    WEnd

    Return $infoarr
    EndFunc ;==> _GetAllNetAdapterInfo

    [/autoit]

    Sag bescheid obs schneller läuft ;)

  • Hi Bitboy,


    vom Grundsatz her läuft die Funktion schneller....allerdings erhalte ich keine Rückgabewerte. Das soll nicht heißen, das sie schlecht ist...allerwahrscheinlichkeit bin ich einfach zu doof ;) .

    Die Funktion liefert bis zum Punkt "Rückgabearray an Adapterzahl anpassen" einen Wert, danach meiner Meinung nicht mehr.

  • Hilft dir das vielleicht weiter?

    Spoiler anzeigen
    [autoit]


    ;Coded by UEZ 2009
    #AutoIt3Wrapper_Change2CUI=y
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseX64=n
    #include <array.au3>
    Global $server = "localhost"
    If $CmdLine[0] > 0 Then $server = $CmdLine[1]

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

    $objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $server & "\root\cimv2")

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

    Network($server)

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

    Func Network($srv)
    Local $function_name = "Network"
    Local $filename_nw = $function_name & "_" & $srv
    Local $filename_error_current = $function_name & "_" & $srv & "_error.log"
    Local $col2Items, $Network, $j, $tmp, $TimeStamp
    Local $Net_Description, $Net_Adapter, $Net_IP, $Net_Subnet, $Net_GW, $Net_MAC, $Net_DNSSearchOrder, $Net_DNSDomainSuffixSearchOrder, $Net_Wins1, $Net_Wins2, $Net_DHCP_Server
    $Network = ""
    $colItems = $objWMIService.ExecQuery("SELECT DHCPServer, Description, WINSPrimaryServer, WINSSecondaryServer, MACAddress, DefaultIPGateway, IPAddress, IPSubnet, DNSServerSearchOrder, DNSDomainSuffixSearchOrder FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", 0x30)
    $col2Items = $objWMIService.ExecQuery("SELECT MACAddress, NetConnectionID FROM Win32_NetworkAdapter")

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

    If IsObj($colItems) Then
    $Network = ""
    For $objItem In $colItems
    $Net_Adapter = ""
    $Net_Description = ""
    $Net_DHCP_Server = ""
    $Net_DNSSearchOrder = ""
    $Net_DNSDomainSuffixSearchOrder = ""
    $Net_GW = ""
    $Net_IP = ""
    $Net_MAC = ""
    $Net_Subnet = ""
    $Net_Wins1 = ""
    $Net_Wins2 = ""

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

    $Net_Description = $objItem.Description

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

    If IsObj($col2Items) Then
    For $obj2Item In $col2Items
    If $objItem.MACAddress = $obj2Item.MACAddress And $obj2Item.NetConnectionID <> "" Then
    $Net_Adapter = $obj2Item.NetConnectionID
    EndIf
    Next
    ;If $Net_Adapter = "" Then $Net_Adapter = $Net_Description
    EndIf

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

    $Net_Wins1 = $objItem.WINSPrimaryServer
    $Net_Wins2 = $objItem.WINSSecondaryServer
    $Net_MAC = $objItem.MACAddress

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

    For $x = 0 To UBound($objItem.IPAddress) - 1
    $Net_IP &= $objItem.IPAddress($x) & ", "
    Next
    $Net_IP = Remove_Last_Comma($Net_IP)

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

    For $x = 0 To UBound($objItem.IPSubnet) - 1
    $Net_Subnet &= $objItem.IPSubnet($x) & ", "
    Next
    $Net_Subnet = Remove_Last_Comma($Net_Subnet)

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

    For $x = 0 To UBound($objItem.DefaultIPGateway) - 1
    $Net_GW &= $objItem.DefaultIPGateway($x) & ", "
    Next
    $Net_GW = Remove_Last_Comma($Net_GW)

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

    For $x = 0 To UBound($objItem.DNSServerSearchOrder) - 1
    $Net_DNSSearchOrder &= $objItem.DNSServerSearchOrder($x) & ", "
    Next
    $Net_DNSSearchOrder = Remove_Last_Comma($Net_DNSSearchOrder)

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

    For $x = 0 To UBound($objItem.DNSDomainSuffixSearchOrder) - 1
    $Net_DNSDomainSuffixSearchOrder &= $objItem.DNSDomainSuffixSearchOrder($x) & ", "
    Next
    $Net_DNSDomainSuffixSearchOrder = Remove_Last_Comma($Net_DNSDomainSuffixSearchOrder)

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

    If $objItem.DHCPServer <> "255.255.255.255" Then $Net_DHCP_Server = $objItem.DHCPServer

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

    $Network &= $srv & ";" & $Net_Adapter & ";" & $Net_Description & ";" & $Net_IP & ";" & $Net_Subnet & ";" & $Net_GW & ";" & $Net_MAC & ";" & $Net_DNSSearchOrder & ";" & $Net_DNSDomainSuffixSearchOrder & ";" & $Net_Wins1 & ";" & $Net_Wins2 & ";" & $Net_DHCP_Server & @CRLF
    Next
    EndIf
    ConsoleWrite($Network & @CRLF)
    EndFunc ;==>Software

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

    Func Remove_Last_Comma($str)
    If StringRight($str, 2) = ", " Then $str = StringMid($str, 1, StringLen($str) - 2)
    If StringRight($str, 1) = "," Then $str = StringMid($str, 1, StringLen($str) - 1)
    Return $str
    EndFunc ;==>Remove_Last_Comma

    [/autoit]

    Du kannst ja hier noch Inputfelder hinzufügen!

    Gruß.
    UEZ

    PS: ist aus SIC2 ;)

  • Hallo,
    bei mir läuft das Script auf 2 Rechnern einwandfrei, Rückgabe aller Adapter (auch 2 virtuelle) ordnungsgemäß im Array.
    System XP SP3

  • Andy: Wie gesagt, ich bin wahrscheinlich zu dämlich dazu....


    UEZ: Dein Skript läuft genauso schnell wie meine Variante..bringt mich also nicht weiter. Trotzdem Danke !


    @ALL: Da meine Funktion soweit problemlos läuft und mir die Zeit davon läuft denke ich das ich die Zeit von 8 Sek. meinem Chef verkaufen kann. Ich danke euch ALLEN für eure Mühe !!

  • Hab zwar nur einen Netzwerk-Adapter, aber hast du den Vorschlag von Andy schon probiert, mittels ipconfig an die Daten zu kommen?

    [autoit]

    #include <Constants.au3>

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

    Local $PID = Run(@ComSpec & ' /c ipconfig /all|find "IP-Adresse"', "", @SW_HIDE, $STDOUT_CHILD)
    Local $line
    While 1
    $line &= StdoutRead($PID)
    If @error Then ExitLoop
    Wend

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

    MsgBox(0, "IP-Adressen:", $line)

    [/autoit]
  • Zitat

    Andy: Wie gesagt, ich bin wahrscheinlich zu dämlich dazu....

    Glaub ich nicht....
    Auf welchem System soll die Anwendung laufen? Vista/Win7 brauchen für einige Zugriffe ab und zu diesen #requireadmin, ggf sind auch die Pfade in der Registry anders oder oder oder

    funkey
    zwar 20x langsamer als bitboy´s Variante aber immer noch 20x schneller als die von Apocsis :D

  • Andy: Wie gesagt, ich bin wahrscheinlich zu dämlich dazu....


    UEZ: Dein Skript läuft genauso schnell wie meine Variante..bringt mich also nicht weiter. Trotzdem Danke !


    @ALL: Da meine Funktion soweit problemlos läuft und mir die Zeit davon läuft denke ich das ich die Zeit von 8 Sek. meinem Chef verkaufen kann. Ich danke euch ALLEN für eure Mühe !!

    Ist auch eher für Remote Abfragen konzipiert! Für "nur" lokale Abfragen würde ich sehr wahrscheinlich kein WMI benutzen!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Andy: Es soll auf XP Pro SP3 Clients laufen (einige habe Admin rechte einige nicht..). Wie kann ich das Array in Iputboxen wiedergeben ?? Es sollen nur die IP-Adressen der "LAN-Verbindung" und der "WLAN-Verbindung" abgefragt werden.


    funkey: Mit "ipconfig" bekomme ich den Wert : "IPadresse...........:192.168.2.151". Dieser ist leider für meine Zwecke ungeeignet, da später anhand der IP-Adressen bestimmte Auswahlen getroffen werden.( z.B. 192.168.2.151 = Heilungsnetz bzw. 192.168.4.50 = Officenetz).

  • Wieso ungeeignet? Aufgrund des vorangehenden 'IP-Adresse...........:'? Das lässt sich doch ohne weiteres wegschneiden und die Ausgabe kann man auch in ein Array umwandeln.

    Und wie kann ich es "wegschneiden" ?? Sorry bin eben noch Anfänger :(

  • Hi,

    $string = "IPadresse...........:192.168.2.151"
    $ip = StringMid ($string, StringInStr ($string, ":") + 1)

    ;-))
    Stefan

  • sodele...was passiert denn, wenn du dieses Script aufrufst?
    Stehen alle Adapter und IP-Adressen im Arraydisplay?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    ;######################################################################################################
    ;# Function Name: _GetAllNetAdapterInfo()
    ;# Description:: Auslesen aller vorhandenen Netzwerkadapter und deren Konfiguration
    ;# Parameter(s): keine
    ;# Requirement(s): keine
    ;# Return Value(s): Erfolg Array[0][0] Anzahl der Adapter
    ;# Array[n][0] Adapter Name (wie in Systemsteuerung ==> Netzwerkverbindungen)
    ;# Array[n][1] Adapter Beschreibung
    ;# Array[n][2] IP-Adresse
    ;# Array[n][3] SubNetMask
    ;# Array[n][4] DHCP-Enabled (0/1)
    ;# Array[n][5] DHCP IP-Adresse
    ;# Array[n][6] DHCP SubNetMask
    ;# Array[n][7] DHCP Default Gateway
    ;# Array[n][8] DHCP Server
    ;# Fehler Array[0][0] Leerstring (kein Adapter vorhanden)
    ;# Author(s): Bitboy, nach einer Idee von BugFix ([email='bugfix@autoit.de'][/email])
    ;######################################################################################################

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

    $a=_GetAllNetAdapterInfo ()
    _arraydisplay($a)

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

    Func _GetAllNetAdapterInfo ()
    Local $infoarr[1][9], $keyarr[1], $i=0, $x=0, $counter=0, $tmp, $tmp2, $short

    ;Registrierte Adapter zählen
    While 1
    $i = $i + 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services", $i)
    If @error <> 0 then ExitLoop

    ;Adapter sind in den einzigen Schlüsseln die mit "{" beginnen
    If StringInStr($tmp,"{") Then
    $short = 1 ;Merker zum Verkürzen der Schleife da Keys alphabetisch sortiert
    $counter = $counter + 1
    Redim $keyarr[$counter+1]
    $keyarr[$counter] = $tmp ;Speichern der Adapterschlüssel
    $keyarr[0] = $counter
    Else
    If $short = 1 Then ExitLoop
    EndIf
    WEnd

    ;Funktion verlassen wenn kein Adapter gefunden wurde
    If $counter = 0 Then
    $infoarr[0][0] = 0
    Return $infoarr
    EndIf

    ;Rückgabearray an Adapterzahl anpassen
    Redim $infoarr[$counter+1][9]
    $infoarr[0][0] = $counter

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

    ; TCP-Informationen auslesen
    For $i = 1 to $counter
    $infoarr[$i][2] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'IPAddress')
    $infoarr[$i][3] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'SubnetMask')
    $infoarr[$i][4] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'EnableDHCP')
    $infoarr[$i][5] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpIPAddress')
    $infoarr[$i][6] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpSubnetMask')
    $infoarr[$i][7] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpDefaultGateway')
    $infoarr[$i][8] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpServer')
    Next

    ;Adapternamen auslesen
    $i = 1
    $short = 0
    While 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}",$i)
    If @error <> 0 then ExitLoop

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

    $tmp2 = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "NetCfgInstanceId")
    For $x = 1 To $counter

    ;Zugeordnete Verbindung auslesen
    $infoarr[$x][1] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\' & $keyarr[$x] & '\Connection', 'Name')
    If $tmp2 = $keyarr[$x] Then
    $infoarr[$x][0] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "DriverDesc")
    $short = $short +1 ;gefundene Namen zählen
    EndIf
    Next

    If $short = $counter Then ExitLoop ;Alle Adapternamen gefunden

    $i = $i +1
    WEnd

    Return $infoarr
    EndFunc ;==> _GetAllNetAdapterInfo

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    Local $msg, $Input1, $Input2, $Beenden
    local $lan_IP="nicht feststellbar"
    local $wlan_IP="nicht feststellbar"

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

    dim $a[1][1]

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

    #Region ### START Koda GUI section ### Form=
    GUICreate("Form1", 263, 187, 390, 114)

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

    $a = _GetAllNetAdapterInfo() ;alle Adapterinfos aus der Registry auslesen und in ein Array schreiben
    if not isarray($a) Then ; wenn es keine Netzwerkadapter gibt, programm beenden
    msgbox(1,"Fehler", "Es können keine Netzwerkadapter festgestellt werden!"&@crlf&"Programm wird beendet!")
    Exit
    endif

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

    _ArrayDisplay($a) ;auskommentieren wenn nicht benötigt!

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

    For $i =1 to $a[0][0] ;alle adapter durchsuchen
    if $a[$i][1]="LAN-Verbindung" then $lan_IP=$a[$i][5] ;wenn in der 2. Spalte der String "LAN-Verbindung" vorkommt, dann die 5. Spalte merken
    if $a[$i][1]="Drahtlose Netzwerkverbindung" then $wlan_IP=$a[$i][5] ;wenn in der 2. Spalte der String "Drahtlose Netzwerkverbindung" vorkommt, dann die 5. Spalte merken
    next

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

    $Input1 = GUICtrlCreateInput($lan_IP, 112, 28, 105, 21) ;hier die gedfundene IP eintragen
    $Input2 = GUICtrlCreateInput($wlan_IP, 112, 69, 105, 21) ;hier die gedfundene IP eintragen
    GUICtrlCreateLabel("LAN IP Adresse", 16, 32, 79, 17)
    GUICtrlCreateLabel("WLAN IP Adresse", 16, 72, 90, 17)
    $Beenden = GUICtrlCreateButton("Beenden", 40, 120, 177, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE Or $msg = $Beenden
    ExitLoop
    EndSelect

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

    WEnd

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

    ;######################################################################################################
    ;# Function Name: _GetAllNetAdapterInfo()
    ;# Description:: Auslesen aller vorhandenen Netzwerkadapter und deren Konfiguration
    ;# Parameter(s): keine
    ;# Requirement(s): keine
    ;# Return Value(s): Erfolg Array[0][0] Anzahl der Adapter
    ;# Array[n][0] Adapter Name (wie in Systemsteuerung ==> Netzwerkverbindungen)
    ;# Array[n][1] Adapter Beschreibung
    ;# Array[n][2] IP-Adresse
    ;# Array[n][3] SubNetMask
    ;# Array[n][4] DHCP-Enabled (0/1)
    ;# Array[n][5] DHCP IP-Adresse
    ;# Array[n][6] DHCP SubNetMask
    ;# Array[n][7] DHCP Default Gateway
    ;# Array[n][8] DHCP Server
    ;# Fehler Array[0][0] Leerstring (kein Adapter vorhanden)
    ;# Author(s): Bitboy, nach einer Idee von BugFix ([email='bugfix@autoit.de'][/email])
    ;######################################################################################################

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

    Func _GetAllNetAdapterInfo()
    Local $infoarr[1][9], $keyarr[1], $i = 0, $x = 0, $counter = 0, $tmp, $tmp2, $short

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

    ;Registrierte Adapter zählen
    While 1
    $i = $i + 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services", $i)
    If @error <> 0 Then ExitLoop

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

    ;Adapter sind in den einzigen Schlüsseln die mit "{" beginnen
    If StringInStr($tmp, "{") Then
    $short = 1 ;Merker zum Verkürzen der Schleife da Keys alphabetisch sortiert
    $counter = $counter + 1
    ReDim $keyarr[$counter + 1]
    $keyarr[$counter] = $tmp ;Speichern der Adapterschlüssel
    $keyarr[0] = $counter
    Else
    If $short = 1 Then ExitLoop
    EndIf
    WEnd

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

    ;Funktion verlassen wenn kein Adapter gefunden wurde
    If $counter = 0 Then
    $infoarr[0][0] = 0
    Return $infoarr
    EndIf

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

    ;Rückgabearray an Adapterzahl anpassen
    ReDim $infoarr[$counter + 1][9]
    $infoarr[0][0] = $counter

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

    ; TCP-Informationen auslesen
    For $i = 1 To $counter
    $infoarr[$i][2] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'IPAddress')
    $infoarr[$i][3] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'SubnetMask')
    $infoarr[$i][4] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'EnableDHCP')
    $infoarr[$i][5] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpIPAddress')
    $infoarr[$i][6] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpSubnetMask')
    $infoarr[$i][7] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpDefaultGateway')
    $infoarr[$i][8] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpServer')
    Next

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

    ;Adapternamen auslesen
    $i = 1
    $short = 0
    While 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}", $i)
    If @error <> 0 Then ExitLoop

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

    $tmp2 = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "NetCfgInstanceId")
    For $x = 1 To $counter

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

    ;Zugeordnete Verbindung auslesen
    $infoarr[$x][1] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\' & $keyarr[$x] & '\Connection', 'Name')
    If $tmp2 = $keyarr[$x] Then
    $infoarr[$x][0] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "DriverDesc")
    $short = $short + 1 ;gefundene Namen zählen
    EndIf
    Next

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

    If $short = $counter Then ExitLoop ;Alle Adapternamen gefunden

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

    $i = $i + 1
    WEnd

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

    Return $infoarr
    EndFunc ;==>_GetAllNetAdapterInfo

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

    Func GetIP($AdapterName)
    Local $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2'), $Output = 0
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    Local $colItems2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration', 'WQL', 0x30)
    If IsObj($colItems2) Then
    For $objItem2 In $colItems2
    If $objItem.Caption = $objItem2.Caption Then
    If $objItem.NetConnectionID = $AdapterName Then
    $Output = $objItem2.IPAddress(0)
    EndIf
    EndIf
    Next
    EndIf
    Next
    EndIf
    Return $Output
    EndFunc ;==>GetIP

    [/autoit]

    hab dein script mal "Chefkompatibel" umgebaut :)

    */EDIT/* Adapter genauer spezifiziert....

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    5 Mal editiert, zuletzt von Andy (8. Oktober 2009 um 13:40)