Externe .txt Datei

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    ;Hier werden die Variabeln definiert
    $adapt = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001\Ndi" , "Service")
    $speed = IniRead(@ScriptDir & "\Nics.ini" , $adapt , $adapt , "Error")
    $delay = IniRead(@ScriptDir & "\Nics.ini" , $adapt , "delay" , "Error")
    $MY_IP = @IPAddress1

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

    ;Wenn der Netzwerkadapter nicht im Nics.ini vorhanden ist, erscheint diese Fehlermeldung.
    if $speed = "Error" Then
    MsgBox(0, "Der Eintrag des Netzwerkadapters " & $adapt " besteht nicht. Bitte kontaktieren Sie den Systemadministrator")
    else
    If $delay = "Error" Then
    MsgBox(0, "Der Eintrag des der Geschwindigkeit " & $speed " besteht nicht. Bitte kontaktieren Sie den Systemadministrator")
    else
    ;Nics.ini wird nach $speed durchsucht. Bei Erfolg wird das "delay" von $var1 durch den in der entsprechenden Section Wert ersetzt.
    RegWrite ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001" , $speed , "REG_SZ" , $delay)
    EndIf
    EndIf

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

    ;------------------------------------------------------------------------------------------
    ; Autor BugFix [email='bugfix@autoit.de'][/email]
    ;------------------------------------------------------------------------------------------

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

    #include <array.au3>

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

    Func _ChangeGatewayAndBack($MY_IP, "xxxxxxxxxxx", "192.168.2.1" , $TIMEOUT=-1)
    Local $ARGATEWAY = _ArrayCreate("xxxxxxxxxx", "xxxxxxxxxxx")
    Local $ARFAKEGATEWAY = _ArrayCreate("192.168.2.1", "192.168.2.1")
    Local $TIME, $EMERGENCY = 0, $strComputer = "."
    Switch $TIMEOUT
    Case -1
    $TIME = 1000
    Case 0
    $EMERGENCY = 1
    Case Else
    $TIME = $TIMEOUT
    EndSwitch
    $objWMIService = ObjGet("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
    $colNetCards = $objWMIService.ExecQuery _
    ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
    If $EMERGENCY = 0 Then
    For $objNetCard in $colNetCards
    If $objNetCard.IPAddress(0) = $MY_IP Then
    $objNetCard.SetGateways($ARFAKEGATEWAY)
    Sleep($TIME)
    $objNetCard.SetGateways($ARGATEWAY)
    ExitLoop
    EndIf
    Next
    Else
    For $objNetCard in $colNetCards
    If $objNetCard.IPAddress(0) = $MY_IP Then
    $objNetCard.SetGateways($ARFAKEGATEWAY)
    ExitLoop
    EndIf
    Next
    EndIf
    EndFunc ;==>_ChangeGatewayAndBack

    [/autoit]

    Einmal editiert, zuletzt von ManuIt (29. August 2007 um 16:59)

    • Offizieller Beitrag

    Eine Funktion wird mit ihrem Namen aufgerufen und die notwendigen Parameter werden übergeben:

    [autoit]

    Dim $meineIP = 192.168.0.100
    Dim $realGateway = 192.168.0.1
    Dim $fakeGateway = 10.10.0.1
    Dim $Zeit_bis_reconnect = 5000 ; Standard ist 2000 ms, dann brauchst du den Parameter nicht angeben
    _ChangeGatewayAndBack($meineIP, $realGateway, $fakeGateway, $Zeit_bis_reconnect)

    [/autoit]
  • Danke.
    Aber wie kann ich machen dass es automatisch die Ip des benutzten Rechners nimmt?
    So gehts nicht.

    [autoit]

    Dim $MY_IP = @IPAddress1

    [/autoit]
    • Offizieller Beitrag
    Zitat

    Original von ManuIt
    Danke.
    Aber wie kann ich machen dass es automatisch die Ip des benutzten Rechners nimmt?
    So gehts nicht.

    [autoit]

    Dim $MY_IP = @IPAddress1

    [/autoit]

    Tja, generell kannst du das nur automatisieren, wenn sicher ist, dass der Rechner NUR einen aktiven Netzwerkadapter hat.
    Ich hab z.B. WLAN, LAN und Bluetooth-LAN - also 3 aktive Adapter. Somit kann ich da nur manuell auswählen oder ich frage den Adapternamen ab.

    Hier eine Funktion von mir, die ein Array mit den aktiven Adaptern zurückgibt.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    _ArrayDisplay(_GetNetworkAdapterIPEnabled())

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

    ;****************************************************************************************
    ; Function _GetNetworkAdapterIPEnabled()
    ;
    ; Description Get all IP-Enabled networkadapter
    ;
    ; Return Array networkadapter
    ; Array[n][0] Caption
    ; Array[n][1] IP-Adresse
    ; Array[n][2] Subnet
    ; Array[n][3] Standardgateway
    ; If not found IPEnabled Adapter:
    ; Return -1 und @error = 1
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;****************************************************************************************
    Func _GetNetworkAdapterIPEnabled()
    Dim $arAdapter[1], $var
    $arAdapter[0] = -1
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $strComputer = "localhost"
    $objWMIService = ObjGet("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
    $IPConfigSet = $objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    For $IPConfig in $IPConfigSet
    For $i=0 to UBound($IPConfig.IPAddress)-1
    If $IPConfig.IPAddress($i) <> '0.0.0.0' Then
    $settings = $IPConfig.Caption & '|' & _
    $IPConfig.IPAddress($i) & '|' & _
    $IPConfig.IPSubnet(0) & '|' & _
    $IPConfig.DefaultIPGateway(0)
    If $arAdapter[0] = -1 Then
    $arAdapter[0] = $settings
    Else
    For $i = 0 To UBound($arAdapter)-1
    If $arAdapter[$i] = $settings Then
    ExitLoop
    Else
    ReDim $arAdapter[UBound($arAdapter)+1]
    $arAdapter[UBound($arAdapter)-1] = $settings
    EndIf
    Next
    EndIf
    EndIf
    Next
    Next
    If $arAdapter[0] = -1 Then
    SetError(1)
    Return -1
    Else
    Local $arOut[UBound($arAdapter)][4]
    For $i = 0 To UBound($arAdapter)-1
    $var = StringSplit($arAdapter[$i], '|')
    $arOut[$i][0] = $var[1]
    $arOut[$i][1] = $var[2]
    $arOut[$i][2] = $var[3]
    $arOut[$i][3] = $var[4]
    Next
    EndIf
    Return $arOut
    EndFunc ;==>_GetNetworkAdapterIPEnabled

    [/autoit]
  • Vielen Dank für die Antworten.
    Leider bringe ich BugFix' code nicht zum laufen.
    Muss ich was an _ArrayDisplay(_GetNetworkAdapterIPEnabled()) ändern?
    Gibt's keine Func, die automatisch den die Ip der "Local Area Connection" ausgibt?

    Einmal editiert, zuletzt von ManuIt (30. August 2007 um 08:51)

    • Offizieller Beitrag
    Zitat

    Muss ich was an _ArrayDisplay(_GetNetworkAdapterIPEnabled()) ändern?


    Ja, das hab ich nur drüber gestellt, damit du das Ergebnis der Funktion gleich siehst.
    Du mußt natürlich so vorgehen:

    [autoit]

    $ArrayAktiveAdapter = _GetNetworkAdapterIPEnabled()

    [/autoit]

    und anschließend den Inhalt des Array abfragen, steht ja im Funktionskopf alles erklärt.

    Zitat

    Gibt's keine Func, die automatisch den die Ip der "Local Area Connection" ausgibt?

    Hab ich bis jetzt nicht entdeckt. Ich habe aber eine Funktion, die die Windowsbezeichnungen für die Adapter (also LAN1; LAN2 usw.) ermittelt. Vielleicht läßt sich das kombinieren. Wenn ich es hinkriege, aktualisiere ich das hier.

    Bleibt aber nach wie vor, dass du wissen mußt welches die verwendete Verbindung (LAN1; LAN2 usw.) ist.

  • Ich habe beschlossen das ganze mit einem Reboot zu lösen.

    3 Mal editiert, zuletzt von ManuIt (31. August 2007 um 08:32)

  • Ich habe jetzt dieses Script:


    Spoiler anzeigen
    [autoit]

    ;Hier werden die Variabeln definiert
    $adapt = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001\Ndi" , "Service")
    $speed = IniRead(@ScriptDir & "\Nics.ini" , $adapt , $adapt , "Error")
    $delay = IniRead(@ScriptDir & "\Nics.ini" , $adapt , "delay" , "Error")

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

    if $delay = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001" , $speed ) Then
    Exit
    Else
    ;Wenn der Netzwerkadapter nicht im Nics.ini vorhanden ist, erscheint diese Fehlermeldung.
    if $speed = "Error" Then
    MsgBox(0, "Error" , "Der Eintrag des Netzwerkadapters besteht nicht. Bitte kontaktieren Sie den Systemadministrator. Der Adapter heisst: " & $adapt )
    else
    If $delay = "Error" Then
    MsgBox(0, "Error" , "Die Geschwindigkeit ist noch nicht definiert. Bitte kontaktieren Sie den Systemadministrator.")
    else
    ;------------------->
    If $delay = "0" Then
    ;<---------------------
    ;Nics.ini wird nach $speed durchsucht. Bei Erfolg wird das "delay" durch den in der entsprechenden Section Wert ersetzt.
    RegWrite ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001" , $speed , "REG_SZ" , $delay)
    Shutdown(2)
    EndIf
    EndIf
    EndIf

    [/autoit]

    Ich möchte gerne machen, dass es

    [autoit]

    if $delay = "0", "3", "4","5","6"

    [/autoit]


    entweder 0, oder 3-6 sein muss.
    wie geht das am einfachsten?

  • In der Registry, unter:

    Code
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001


    befinded sich eine Zeile in der steht:

    Code
    SpeedDuplex     REG_SZ     0


    Nun habe ich in meinem Script eine Var, die $speed heisst.
    Wie kann ich überprüfen, ob $speed = SpeedDuplex?
    Wenn ich das habe, bin ich fertig.

    4 Mal editiert, zuletzt von ManuIt (31. August 2007 um 15:25)

  • so gibt es mir aber den wert 0 aus.
    es müsste aber der werd SpeedDuplex ausgegeben werden...
    naja...
    Es hat alles keinen Sinn...
    Alles ist zu Kompliziert... :weinen:

  • Ich bin Fertig.
    Es intressiert sowieso niemand, aber hier ist das Resultat:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.3.12 (beta)
    Author: Valentin W.

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

    Script Function:
    Ändert die Geschwindigkeit und den Duplexmodus.

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

    #ce ----------------------------------------------------------------------------

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

    #include <Constants.au3>

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

    ;Hier werden die Variabeln definiert
    $adapt = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001\Ndi" , "Service")
    $speed = IniRead("\\xxxxxx\software\Source_Appl\tcp_speed\log\Nics.ini" , $adapt , "speed" , "Error")
    $delay = IniRead("\\xxxxxxx\software\Source_Appl\tcp_speed\log\Nics.ini" , $adapt , "delay" , "Error")
    $Test = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001" , $speed)

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

    Dim $Test

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

    If @error Then
    MsgBox(4112,"Error","Das angegebene Speedverzeichnis für diesen Adapter ist nicht vorhanden in der Registry.")
    Exit
    Else
    While 1
    If @error = "-1" Then
    MsgBox (16, "Error" , "Speed wurde in der Registry nicht gefunden.")
    Exit
    EndIf
    If @error Then
    MsgBox (16, "Error" , "Speed wurde in der Registry nicht gefunden.")
    Exit
    EndIf
    If $speed = "Error" Then
    MsgBox (16, "Error" , "Der Schlüssel speed oder der Adapter ist in Nics.ini nicht vorhanden. Bitte kontaktieren Sie die Informatik.")
    Exit
    Else
    if $delay = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001" , $speed ) Then
    Exit
    Else
    if $speed = "Error" Then
    MsgBox(16, "Error" , "Der Eintrag des Netzwerkadapters besteht nicht. Bitte kontaktieren Sie die Informatik. Der Adapter heisst: " & $adapt )
    Exit
    else
    If $delay = "Error" Then
    MsgBox(16, "Error" , "Der Schlüssel delay ist nicht angegeben. Bitte kontaktieren Sie die Informatik.")
    Exit
    else
    If $delay = "0" Or $delay = "3" Or $delay = "4" Or $delay = "5" Or $delay = "6" Then
    RegWrite ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001" , $speed , "REG_SZ" , $delay)
    Shutdown(2)
    Else
    MsgBox(16, "Error" , "Ein falsches delay wurde angegeben. Bitte kontaktieren Sie die Informatik.")
    Exit
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    WEnd
    EndIf

    [/autoit] [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.3.12 (beta)
    Author: Valentin W.

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

    Script Function:
    Reads the Adapters and write them into a extern document.

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

    #ce ----------------------------------------------------------------------------

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

    $adapt = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001\Ndi" , "Service")
    $pcname = EnvGet ("COMPUTERNAME")

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

    IniWrite ("\\xxxxxx\software\Source_Appl\tcp_speed\log\data.ini", $adapt, $pcname, "computername" )

    [/autoit]


    Edit BugFix: Wieso soll das keinen interessieren? Denke nicht so negativ - die AutoIt-Gemeinde kümmert sich um all ihre Mitglieder ;)
    Habe Spoiler gesetzt.

    Einmal editiert, zuletzt von ManuIt (5. September 2007 um 10:14)