Da gebe ich dir natürlich recht.
Wenn die technischen Voraussetzungen einen einfacheren Weg zulassen sollte man den natürlich wählen.
Bin nicht so firm in Netzwerktechnik. Aber ich find die Problemstellung sehr reizvoll.
Da gebe ich dir natürlich recht.
Wenn die technischen Voraussetzungen einen einfacheren Weg zulassen sollte man den natürlich wählen.
Bin nicht so firm in Netzwerktechnik. Aber ich find die Problemstellung sehr reizvoll.
Ich denke mal, ein tatsächlicher Scan in allen Oktetts ist auch nicht das Ziel.
(Schon allein das Erstellen aller Adressen von 0.0.0.0 bis 255.255.255.255 dauert auf einem 'normalschnellen' PC mindestens 12 Stunden.)
Wichtig war nur einen Algorithmus zu finden, der berücksichtigt, dass innerhalb eines Oktetts nach 255 wieder ab 0 gezählt wird.
Hier mal komplett:
[autoit]#include <guiconstants.au3>
#include <misc.au3>
$GUI_Popup = GUICreate('', 200, 100, 12, 12,$WS_POPUP)
GUICtrlCreateLabel("Irgendein Text", 70, 38)
GUISetState(@SW_SHOW, $GUI_Popup)
Do
sleep(100)
Until _IsPressed('0D')
GUISetState(@SW_HIDE, $GUI_Popup)
Erstelle eine GUI mit Style: $WS_POPUP
Über _IsPressed() fragst du die Entertaste ab (Wert schau mal in die Hilfe)
Do
sleep(100)
Until _IsPressed('Wert_für_ENTER')
GUISetState(@SW_HIDE, $GUI_Popup)
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)
GtaSpider : Mit deinem Muster wird aber nicht das jeweilige Oktett komplett durchlaufen.
P.S. Ich hatte vor dir nen Post. Hatte ich aber wegen eines Fehlers wieder gekillt.
Hier mal mein Vorschlag, nachdem ich ein paar Knoten im Hirn gelöst hatte funktioniert es nun auch.
; generiert alle möglichen Adressen zwischen 192.166.250.1 und 192.168.0.1 ($s1.$s2.$s3.$s4 bis $e1.$e2.$e3.$e4)
[/autoit] [autoit][/autoit] [autoit]Dim $s1 = 192, $e1 = 192
Dim $s2 = 166, $e2 = 168
Dim $s3 = 250, $e3 = 0
Dim $s4 = 1, $e4 = 1
Dim $start2 = $s2, $start3 = $s3, $start4 = $s4
For $1 = $s1 To $e1
If $1 <> $e1 Then
$end2 = 255
If $1 <> $s1 Then $start2 = 0
Else
$end2 = $e2
EndIf
For $2 = $start2 To $end2
If ( $2 <> $e2 Or $1 <> $e1 ) Then
$end3 = 255
If $2 <> $s2 Then $start3 = 0
Else
$end3 = $e3
EndIf
For $3 = $start3 To $end3
If ( $3 <> $e3 Or $2 <> $e2 Or $1 <> $e1 ) Then
$end4 = 255
If $3 <> $s3 Then $start4 = 0
Else
$end4 = $e4
EndIf
For $4 = $start4 To $end4
ConsoleWrite($1 &'.'& $2 &'.'& $3 &'.'& $4 & @CRLF)
Next
Next
Next
Next
Edit: Ich habe die Generierung der IP's mal in eine Funktion gepackt.
;----------------------------------------------------------------------------------------------------------------------
; Function _GenerateIPsInRange($IPstart, $IPend)
;
; Description Generate all possible IP's between $IPstart and $IPend and write in an array
;
; Parameter $IPstart 1st Ip in range
; $IPend last Ip in range
;
; Return Succes Array 1D with all generated IP's
; Failure 0 and set @error 1 : given IP not correct
;
; Author BugFix ([email='bugfix@autoit.de'][/email])
;----------------------------------------------------------------------------------------------------------------------
Func _GenerateIPsInRange($IPstart, $IPend)
Local $pattern = '(\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'& _
'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)'
If ( Not StringRegExp($IPstart, $pattern, 0) Or _
Not StringRegExp($IPend, $pattern, 0) ) Then
SetError(1)
Return 0
EndIf
$var = StringSplit($IPstart, '.')
Local $s1 = $var[1], $s2 = $var[2], $s3 = $var[3], $s4 = $var[4]
$var = StringSplit($IPend, '.')
Local $e1 = $var[1], $e2 = $var[2], $e3 = $var[3], $e4 = $var[4]
Local $start2 = $s2, $start3 = $s3, $start4 = $s4
Local $arOut[1] = [0]
For $1 = $s1 To $e1
If $1 <> $e1 Then
$end2 = 255
If $1 <> $s1 Then $start2 = 0
Else
$end2 = $e2
EndIf
For $2 = $start2 To $end2
If ( $2 <> $e2 Or $1 <> $e1 ) Then
$end3 = 255
If $2 <> $s2 Then $start3 = 0
Else
$end3 = $e3
EndIf
For $3 = $start3 To $end3
If ( $3 <> $e3 Or $2 <> $e2 Or $1 <> $e1 ) Then
$end4 = 255
If $3 <> $s3 Then $start4 = 0
Else
$end4 = $e4
EndIf
For $4 = $start4 To $end4
If $arOut[0] = 0 Then
$arOut[0] = $1 &'.'& $2 &'.'& $3 &'.'& $4
Else
ReDim $arOut[UBound($arOut)+1]
$arOut[UBound($arOut)-1] = $1 &'.'& $2 &'.'& $3 &'.'& $4
EndIf
Next
Next
Next
Next
Return $arOut
EndFunc ;==>_GenerateIPsInRange
Aber hälts du es nicht selbst für hilfreich, diese Informationen im Vorfeld zu bringen?
Dann kommen gar nicht erst solche *bösen* Gedanken auf.
In der heutigen Welt, die gespickt ist mit Abmahnwellen u.ä., achtet natürlich jeder stark darauf, sich nicht in rechtlichen Fallstricken zu verfangen.
Dementsprechend sind natürliche Vorbehalte auf unklare Anfragen/Erklärungen vorprogrammiert.
In diesem Sinne - Viel Spaß noch beim :comp1:
*huggy-voll-zustimm*
Unser spanischer User war auch schon lange nicht mehr da - aber er hat ja sein eigenes spanisches AutoIt-Forum eröffnet.
Bei den Worten: "...mein Programmierer" läuft es mir auch eiskalt den Rücken runter. Das erinnert doch zusehr an den Ex-User, der in "seiner Firma" über 10 Programmierer beschäftigte....
Automatisiere den manuellen Vorgang:
-Neuer Drucker -Netzwerkdrucker -IP-Adresse angeben
Vielleicht gibts noch 'ne andere Variante. Aber so sollte es klappen.
ZitatOriginal von ManuIt
Hat jemand eine Idee, wie ich die Netzwerk-conection disablen und danach wieder enablen kann?
Vielleicht hilft das:
Netzwerkadapter vom Netz trennen
Wenn ich nicht irre, hast du zum selben Thema bei German-nLite einen Thread eröffnet.
http://www.german-nlite.de/Installationsp…ern-t10657.html
Wenn schon Crossposting, dann bitte auch in den jeweiligen Posts darauf verweisen. Sonst wird alles mehrfach durchgekaut.
ZitatIf $find_1 = True Then
oder
If Not $find_1 = False Then
Das ist schon doppelt gemoppelt
Wenn eine Variable einen boolschen Wert hat brauchst du nicht explizit den Inhalt abfragen.
Statt
If $find_1 = True Then
[/autoit]
besser
If $find_1 Then
[/autoit]
und statt
If Not $find_1 = False Then
[/autoit]
besser
If Not $find_1 Then
[/autoit]Hi,
mich hat schon lange gestört, dass _FileWriteFromArray nur mit 1D-Arrays funktioniert.
Deshalb nun hier die Funktion für 1D und 2D -Arrays.
_FileWriteFromArray2D($FILEPATH, $ARRAY [, $iROWstart=0 [, $iROWend=0 [, $iCOLstart=0 [, $iCOLend=0 [, $DELIM='|']]]]])
$iROWstart - Index der Startzeile - Standard 0
$iROWend - Index der Endzeile - Standard (Ubound)-1
$iCOLstart - Index der Startspalte - Standard 0
$iCOLend - Index der Endspalte - Standard (Ubound,2)-1
$DELIM - Trennzeichen - Standard '|'
Bei 2D-Arrays werden pro Textzeile die Einträge der Spalten getrennt durch $DELIM geschrieben.
;==========================================================================================================================================
; Function: _FileWriteFromArray2D($FILEPATH, $ARRAY [, $iROWstart=0 [, $iROWend=0 [, $iCOLstart=0 [, $iCOLend=0 [, $DELIM='|']]]]])
;
; Description: Write 1D/2D array to file, 2D with delimiter between every entry
;
; Parameter(s): $FILEPATH - path/filename of the file to be write
; $ARRAY - array to write from
; optional $iROWstart - start row-index, default 0
; optional $iROWend - end row-index, default Ubound(array)-1
; optional $iCOLstart - start column-index, default 0
; optional $iCOLend - end column-index, default Ubound(array,2)-1
; optional $DELIM - delimiter for 2D-array entries, default '|'
;
; Requirement(s): None
;
; Return Value(s): On Success - Returns -1
; On Failure - Returns 0 and sets @error = 1 (given array is'nt array); @error = 2 (unable to open filepath)
;
; Note: If $iROWstart > $iROWend or $iCOLstart > $iCOLend the values will be swapped among
;
; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
;==========================================================================================================================================
Func _FileWriteFromArray2D($FILEPATH, $ARRAY, $iROWstart=0, $iROWend=0, $iCOLstart=0, $iCOLend=0, $DELIM='|')
If Not IsArray($ARRAY) Then
SetError(1)
Return 0
EndIf
Local $Ubound = UBound($ARRAY)
If $iROWend = 0 Then $iROWend = $Ubound-1
Local $fh = FileOpen($FILEPATH, 2)
If $fh = -1 Then
SetError(2)
Return 0
EndIf
Select
Case $iROWstart < 0 Or $iROWstart > $Ubound-1
$iROWstart = 0
ContinueCase
Case $iROWend < 0 Or $iROWend > $Ubound-1
$iROWend = $Ubound-1
ContinueCase
Case $iROWstart > $iROWend
$tmp = $iROWstart
$iROWstart = $iROWend
$iROWend = $tmp
EndSelect
Local $Ubound2nd = UBound($ARRAY, 2)
If @error = 2 Then
For $i = $iROWstart To $iROWend
FileWriteLine($fh, $ARRAY[$i])
Next
Else
If $iCOLend = 0 Then $iCOLend = $Ubound2nd-1
Select
Case $iCOLstart < 0 Or $iCOLstart > $Ubound2nd-1
$iCOLstart = 0
ContinueCase
Case $iCOLend < 0 Or $iCOLend > $Ubound2nd-1
$iCOLend = $Ubound2nd-1
ContinueCase
Case $iCOLstart > $iCOLend
$tmp = $iCOLstart
$iCOLstart = $iCOLend
$iCOLend = $tmp
EndSelect
For $i = $iROWstart To $iROWend
$tmp = ''
For $k = $iCOLstart To $iCOLend
If $k < $iCOLend Then
$tmp &= $ARRAY[$i][$k] & $DELIM
Else
$tmp &= $ARRAY[$i][$k]
EndIf
Next
FileWriteLine($fh, $tmp)
Next
EndIf
FileClose($fh)
Return -1
EndFunc ;==>_FileWriteFromArray2D
EDIT:
Und hier auch gleich die 'Co-Funktion'
_FilereadToArray2D($FILEPATH, $ARRAY [, $DELIM=-1])
Das Array[0] bzw. Array[0][0] enthält die Anzahl der Elemente.
Durch Angabe des Trennzeichens wird ein 2D-Array erzeugt.
Dabei Beachten:
Alle Zeilen der Datei müssen die gleiche Anzahl von Trennzeichen enthalten, ansonsten wird die Funktion mit Fehler abgebrochen.
;==========================================================================================================================================
; Function: _FilereadToArray2D($FILEPATH, $ARRAY [, $DELIM=-1])
;
; Description: Read 1D/2D array from file, if $DELIM is given (<> -1) 2D array will created
;
; Parameter(s): $FILEPATH - path/filename of the file to read in an array
; $ARRAY - array variable to hold readed data
; optional $DELIM - delimiter for 2D-array entries, default -1 (none 2D-array)
;
; Requirement(s): None
;
; Return Value(s): On Success - Returns -1
; On Failure - Returns 0 and sets @error = 1 (given file are not seperated with given delimiter or count of delimiters
; are not equal); @error = 2 (unable to open filepath)
;
; Note: If given file is delimited to create 2D-array ALL lines need the same count of delimiters, otherwise an error occurs!
;
; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
;==========================================================================================================================================
Func _FilereadToArray2D($FILEPATH, ByRef $ARRAY, $DELIM=-1)
Local $fh = FileOpen($FILEPATH, 0), $line, $var, $n = 1
If $fh = -1 Then
SetError(2)
Return 0
EndIf
If $DELIM <> -1 Then
$line = FileReadLine($fh, 1)
$var = StringSplit($line, $DELIM)
If IsArray($var) Then
$Ubound2nd = $var[0]
Local $AR[1][$Ubound2nd]
$AR[0][0] = 0
Else
SetError(1)
Return 0
EndIf
While 1
$line = FileReadLine($fh, $n)
If @error = -1 Then ExitLoop
$var = StringSplit($line, $DELIM)
If IsArray($var) Then
ReDim $AR[UBound($AR)+1][$Ubound2nd]
For $i = 0 To $Ubound2nd-1
$AR[UBound($AR)-1][$i] = $var[$i+1]
Next
$AR[0][0] += 1
Else
SetError(1)
Return 0
EndIf
$n += 1
Wend
Else
Local $AR[1]
$AR[0] = 0
While 1
$line = FileReadLine($fh, $n)
If @error = -1 Then ExitLoop
ReDim $AR[UBound($AR)+1]
$AR[UBound($AR)-1] = $line
$AR[0] += 1
$n += 1
WEnd
EndIf
FileClose($fh)
$ARRAY = $AR
Return -1
EndFunc ;==>_FilereadToArray2D
:willkommen: "Junger Hüpfer"
Was soll ich denn da sagen... 30 tse tse
Hi & :willkommen:
Ich frag mich ganz brennend, was dieses 'L.' in deinem Namen bedeutet. Macht mich gaaanz wuschig.
Um mehr zu sagen, ist etwas Code notwendig
Die Fehlermeldung besagt, dass die Aktion (.visible) mit diesem Objekt fehlgeschlagen ist.
Kann als Ursache haben, dass das Objekt nicht existiert (abfangen mit IsObj() ) oder dass die Methode nicht auf dieses Objekt angewendet werden kann (mal bei MSDN nachschauen).
Im Portal oben rechts findest du einen Link auf: SciTE4AutoIt
In SciTE ist Koda mit enthalten.
Mal ein grober Entwurf:
[autoit]While 1
$msg = GUIGetMsg()
$statusTab = _GUICtrlTabGetCurSel($Tab)
Select
Case $statusTab = 0
; Tab 0 aktiv
Select
Case $msg = $button
; Code Button
;
;
EndSelect
Case $statusTab = 1
; Tab 1 aktiv
;
;
EndSelect
WEnd
Willst du, dass mit Betätigung von Button1 auch der Code von Button2 ausgeführt wird, leg den entsprechenden Code in eine Funktion und ruf diese auf:
[autoit]Case $msg = $button1
_button1() ; code Button1
_button2() ; code Button2
;
;
Func _button1()
; code
EndFunc
Func _button2()
; code
EndFunc
Status abfragen, welches Tab aktiv ist (Index bei 0 beginnend).
Dann kannst du auch den Button abfragen.