Wozu ein Programm? Kann doch ziemlich jeder Packer: ..dem Archiv hinzufügen - meist als Rechte-Maustastenmenü. ![]()
Beiträge von BugFix
-
-
Hi Anna,
[autoit]
hier liegt der Hund begrabenFor $x = 1 to $aIP[0]
[/autoit]
$ip = ($aIP[$x])
Nextanalog in den anderen For-Schleifen.
Du durchläufst das Array und weist den Inhalt der Variablen $ip zu - aber machst dann nichts weiter damit. Somit hat die Variable nur den Inhalt des letzten Eintrages.
Du mußt also innerhalb der Schleife den sich ändernden Wert auch anwenden.
Gibt es für jede IP exakt einen Modellnamen und eine OID?
Dann brauchst du nur eine einzige Datei (und demzufolge nur ein Array). -
Aufrufeskripte erstellt für Check, Tidy, Run (Compile geändert).
Damit wird nur aufgerufen, wenn aktuelle Datei auch eine au3-Datei ist.
s. Post #1 -
Kann man das irgendwie verhindern?
Jein
Also grundsätzlich kannst du es nicht unterbinden, da es keine "Whitelist" für die UAC gibt.
Mich hat das auch genervt, dass nur von M$ als OK befundene Software ohne Meckern startet. Ich habe die Einstellungen der Benutzerkontensteuerung auf "Nie benachrichtigen" gesetzt.
Damit ist sie defacto wertlos. Aber ich hatte ein (sicherheitstechnisch) Problemloses Computerleben vor UAC und tue mir nicht den Terror an jede zweite Anwendung zusätzlich beim Start zu bestätigen. Total gaga. :wacko: -
Gibt`s bei dir unter Extras kein "Jump to Function Prod" ?
Nein, nicht existent. Kann mich auch nicht erinnern diesen Punkt jemals in einer vorigen Installation gesehen zu haben. -
Und bei mir gibt es den Hotkey Strg+j gar nicht. -
Gibt es in AutoIT evtl eine Möglichkeit so etwas zu realisieren?
[autoit]
Also unabhängig ob Array oder Liste kannst du mit For-In (in VBS For-Each) die Werte durchgehen.
operands = condition.GetArrayItems("Operands");
erzeugt die Liste. An den Inhalt solltest du dann so kommen:For $item In $operands
[/autoit]
ConsoleWrite($item & @CRLF)
NextAuf diese Art und Weise kannst du natürlich dann die Werte in ein AutoIt-Array umschaufeln.
Sind die Listenelemente aber selbst Objekte wird es wohl komplizierter, dann mußt du das mit IsObj() prüfen und ggf. wiederum mit For-In iterieren. Je nachdem, welche Properties das Objekt hat. -
Wie hast du denn sein Tool in SciTE eingebunden?
Öffne in SciTE die "SciTEUser.properties" (Optionen - Benutzereinstellungen).
Dort kannst du dann einen Eintrag erstellen, wie hier im Bsp. für OrganizeInclude:Code
Alles anzeigen# END => DO NOT CHANGE ANYTHING BEFORE THIS LINE #-#-#-#-#-# # 36 OrganizeIncludes #command.36.*.au3="$(autoit3dir)\beta\autoit3.exe" "$(SciteDefaultHome)\OrganizeIncludes\OI_1.0.0.50.au3" "$(FilePath)" command.36.*.au3="$(autoit3dir)\autoit3.exe" "$(SciteDefaultHome)\OrganizeIncludes\OI_1.0.0.50.au3" "$(FilePath)" command.name.36.*.au3=OrganizeIncludes command.save.before.36.*.au3=1 command.is.filter.36.*.au3=1 command.shortcut.36.*.au3=Ctrl+Shift+Alt+I #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # START: DO NOT CHANGE ANYTHING AFTER THIS LINE #-#-#-#-# # Created by SciTEConfig #------------------------------------------------------------Einfach die nächste freie Nummer verwenden (wenn noch nichts dasteht geht es mit 36 los) und Shortcut deiner Wahl eintragen. Der Skriptaufruf ist, denke ich, selbsterklärend.

-
@Raupi: Innerhalb einer Zeichenklasse wird nicht maskiert. "." steht für Punkt und braucht nicht wie sonst mit "\." maskiert werden.

-
Mein Problem ist, dass ich keine Testmöglichkeit habe. Deine Funktion setzt ja als Parameter: (connection, taskSequence, name, description) voraus. Damit kann ich nicht dienen. Wozu dient sie eigentlich genau?
Sieht mir nach Netzwerkadministration aus - nicht gerade mein Spezialgebiet.Edit:
Hab mir nochmal den VBS-Code angeschaut.
Also die Arrayerstellung passiert z.B. hier: operands=Array(oExpression)
Die verwendete Syntax ist: Variable = Array( Argument_1, Argument_2, .., Argument_n)
Es wird aber nur ein Argument übergeben, ein Objekt, das selbst ein Array darstellt.
Und so geht es munter weiter:
Das soeben erstellte Array wird als .Operands dem Objekt condition zugewiesen
condition.Operands=operands
Und dieses Objekt landet in der Eigenschaft .Condition des Objektes group
group.Condition=conditionAlso ich sehe das so:
- du hast eine Hand voll Bonbon (oExpression)
- die steckst du in eine Tüte (operands)
- dann hast du einen Schrank (condition) mit einem Fach in das du die operands steckst
- und dieser Schrank landet in einem Raum (group) unter der Kategorie Möbel (Condition)Und ich weiß nicht, wie ich in AutoIt durch die Zimmertür in die Bonbontüte greifen soll.

Ich vermute mal, dass sich das hier zu tief in Objekte vergräbt. Aber vielleicht kennt sich da jemand besser aus. -
Ohne jetzt speziell auf deinen Code einzugehen:
Meiner Erfahrung nach sind die Arrays in VBS häufig Kollektionen und werden daher von Autoit nicht als Array identifiziert, lassen sich aber in einer For-In-Schleife iterieren. Vielleicht hilft dir der Gedanke weiter. -
Meinst du sowas?
Spoiler anzeigen
[autoit]#include<GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <EditConstants.au3>$1_GUI = GUICreate("Registriervorgang", 485, 150, -1, -1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel("Benutzername:", 10, 14, 130, 20)
GUICtrlCreateLabel("Name:", 10, 44, 130, 20)
GUICtrlCreateLabel("Passwort:", 10, 74, 130, 20)
$Input_1 = GUICtrlCreateInput("", 100, 10, 375, 20)
$L1 = GUICtrlCreateLabel('', 90, 14, 10, 20)
$Input_2 = GUICtrlCreateInput("", 100, 40, 375, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
$L2 = GUICtrlCreateLabel('', 90, 44, 10, 20)
$Input_3 = GUICtrlCreateInput("", 100, 70, 375, 20, $ES_PASSWORD)
GUICtrlSetState(-1, $GUI_DISABLE)
$L3 = GUICtrlCreateLabel('', 90, 74, 10, 20)
$Button_1 = GUICtrlCreateButton("Diesen Einstellungen wählen: 8-16 Zeichen [A-Z | 0-9]", 10, 107, 465, 20)
GUICtrlSetState($Button_1, $GUI_DISABLE)GUISetState(@SW_SHOW, $1_GUI)
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
; IniWrite(@ScriptDir & "\INI\Registrierung.ini", "Registrierung", "Accountname", GUICtrlRead($Input_1))
ConsoleWrite(GUICtrlRead($Input_1) & @CRLF)
ConsoleWrite(GUICtrlRead($Input_2) & @CRLF)
ConsoleWrite(GUICtrlRead($Input_3) & @CRLF)
Exit
EndSelect
WEndFunc WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
Switch $iCode
Case $EN_CHANGE
Switch $hWndFrom
Case GUICtrlGetHandle($Input_1)
If StringRegExp(GUICtrlRead($Input_1), "\A([a-zA-Z0-9]{8,16})\z") Then
GUICtrlSetState($Input_2, $GUI_ENABLE)
GUICtrlSetData($L1, '*')
Else
GUICtrlSetState($Button_1, $GUI_DISABLE)
GUICtrlSetData($L1, '')
EndIf
Case GUICtrlGetHandle($Input_2)
If StringRegExp(GUICtrlRead($Input_2), "\A([a-zA-Z0-9]{8,16})\z") Then
GUICtrlSetState($Input_3, $GUI_ENABLE)
GUICtrlSetData($L2, '*')
Else
GUICtrlSetState($Button_1, $GUI_DISABLE)
GUICtrlSetData($L2, '')
EndIf
Case GUICtrlGetHandle($Input_3)
If StringRegExp(GUICtrlRead($Input_3), "\A([a-zA-Z0-9]{8,16})\z") Then
GUICtrlSetState($Button_1, $GUI_ENABLE)
GUICtrlSetData($L3, '*')
Else
GUICtrlSetState($Button_1, $GUI_DISABLE)
GUICtrlSetData($L3, '')
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND -
Er erkennt nun nichtma mehr, wenn 8+ Zeichen eingegeben wurden..
Ähhh...?? Habe doch direkt vor deinem Post eine Korrektur des Patterns mit Ankerpunkten gepostet.
Wer lesen kann ist klar im Vorteil.
-
-
@Raupi: "Viele Wege führen nach Rom.." w.z.b.w.

@Jautois: Sorry, dass wir deinen Thread gekapert haben
- aber war halt ein interessantes Thema. 
-
GuiCtrlRead($Input)

Wegen der Limitierung quäl mal die Suche - wurde mehrfach ausgiebig behandelt.
Edit: Will mal nicht so sein: Länge und Zeichen in einem Ritt:
[autoit]If Not StringRegExp(GuiCtrlRead($Input), '[a-zA-Z0-9]{8,16}')) Then ConsoleWrite('Machs noch einmal, Sam' & @CRLF)
[/autoit]Edit2: s. korrigiertes Pattern Post #4
-
@Raupi:
Mit der Variante funktioniert dann aber die Ausgabe von Matches mit einfachen Treffern ("\d") nicht, da es kein $aRet[1] gibt, sondern nur den Fullmatch.
Habe das jetzt korrigiert und auch eine Änderung der Positionsermittlung, wenn maskierte Zeichen dabei sind. Ich such einfach nach dem gefundenen Begriff ab der gemeldeten Matchposition mit StringInStr. Das klappt dann.
Vielleicht hat ja mal jemand Muße, das mit etwas komplexeren Ausdrücken zu testen.
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]$s = 'aads|Mein01Test|adsadasMeinTestasdasdsadsdasdasd|Dein002Test|'
[/autoit] [autoit][/autoit] [autoit]
$aOut = _StringRegExpPos($s, '\|((M|D)ein(?:\d{1,3})Test)\|')
_ArrayDisplay($aOut)$s = 'A12C23D45E56F67G7H8I9J0'
[/autoit] [autoit][/autoit] [autoit]
$aOut = _StringRegExpPos($s, '\d')
_ArrayDisplay($aOut)Func _StringRegExpPos($sString, $sPattern)
[/autoit]
Local $pos = 0, $sOut = '', $aRet, $offset, $aSplit, $tmp, $tmpStr, $NonVisibleChar = False
While True
$aRet = StringRegExp($sString, $sPattern, 2, $pos)
$offset = @extended
If Not IsArray($aRet) Then ExitLoop
$pos = $offset - StringLen($aRet[0])
If UBound($aRet) > 1 Then
$aRet[0] = $aRet[1]
$NonVisibleChar = True
Endif
$sOut &= $aRet[0] & Chr(0) & $pos & Chr(29)
$pos = $offset
WEnd
If $pos = 0 Then Return SetError(1, 0, 0) ; kein Match
$aSplit = StringSplit(StringTrimRight($sOut, 1), Chr(29), 1)
Local $aOut[$aSplit[0]][2]
For $i = 1 To $aSplit[0]
$tmp = StringSplit($aSplit[$i], Chr(0))
$aOut[$i - 1][0] = $tmp[1] ; Inhalt
If $NonVisibleChar Then ; korrekte Position ermitteln:
$tmpStr = StringTrimLeft($sString, $tmp[2])
$tmp[2] = StringInStr($tmpStr, $tmp[1]) + $tmp[2]
EndIf
$aOut[$i - 1][1] = $tmp[2] ; Position
Next
Return $aOut
EndFunc ;==>_StringRegExpPos -
Oder habe ich da einen Denkfehler?
Ja
Steht direkt in meinem vorigen Post. Das Ergebnis ist maskiert. Es wird "MeinTest" innerhalb zweier Pipes gesucht. Die Pipes sind aber nicht Bestandteil des gewünschten Matches. Bei Modus 2 bekommst du aber immer den kpl. Treffer, inkl. der ausgeschlossenen Matchbestandteile.Edit:
Äh.. jetzt bin ich verwirrt
Ach, Denkfehler - hatte nicht bedacht, dass im Mode 2 mehr als ein Element im Array steht. Man muß dann Index 1 nehmen. :Kopf-auf-Tisch: -
Das stimmt, aber Modus 2 liefert den gesamten Match (inkl. maskierter Zeichen) - Modus 1 nur den wirklichen Treffer. Wenn du Modus 2 verwendest heißt der Match: "|MeinTest|", in Modus 1: "MeinTest"
-
Und mit Modus 1 bekommt man den Offset um beim nächsten Match weiterzumachen. Ich habe mal beides gemixt.
Edit:
Als Position wird die Position des Matches ausgegeben. Hat man, wie in AspirinJunkies Bsp. Teile des Matches ausgeschlossen ( | ), so muß man deren Länge zur Matchposition dazurechnen.
Und nochwas: Das bedeutet aber auch, dass bei sehr flexiblen Pattern (maskierte Zeichen optional) bei einem Match die Länge(n) addiert werden müssen und beim nächsten gar nicht. Insofern bleibt die Positionsermittlung hiermit eine hochgenaue Schätzung.
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]$s = 'aadsadsadasMeinTestasdasdsad|MeinTest|sdasdasd'
[/autoit] [autoit][/autoit] [autoit]
$aOut = _StringRegExpPos($s, '\|(MeinTest)\|')
_ArrayDisplay($aOut)Func _StringRegExpPos($sString, $sPattern)
[/autoit]
Local $pos = 0, $sOut = '', $aRet, $offset, $aSplit, $tmp
While True
$aRet = StringRegExp($sString, $sPattern, 2, $pos)
$offset = @extended
If Not IsArray($aRet) Then ExitLoop
$pos = $offset - StringLen($aRet[0])
$aRet = StringRegExp($sString, $sPattern, 1, $pos)
$offset = @extended
$sOut &= $aRet[0] & Chr(0) & $pos & Chr(29)
$pos = $offset
WEnd
If $pos = 0 Then Return SetError(1,0,0) ; kein Match
$aSplit = StringSplit(StringTrimRight($sOut, 1), Chr(29) , 1)
Local $aOut[$aSplit[0]][2]
For $i = 1 To $aSplit[0]
$tmp = StringSplit($aSplit[$i], Chr(0))
$aOut[$i-1][0] = $tmp[1]
$aOut[$i-1][1] = $tmp[2]
Next
Return $aOut
EndFunc