1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Benutzerkontosteuerung verhindern

    • BugFix
    • 10. März 2011 um 07:58
    Zitat von MehmeX

    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:

  • Funktionen der Skripte im Includeverzeichnis anzeigen

    • BugFix
    • 9. März 2011 um 23:12
    Zitat von Raupi

    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.

  • Funktionen der Skripte im Includeverzeichnis anzeigen

    • BugFix
    • 9. März 2011 um 19:03

    :D Und bei mir gibt es den Hotkey Strg+j gar nicht.

  • Unterschied zwischen VBS Arrays und AutoIT Arrays

    • BugFix
    • 9. März 2011 um 17:48
    Zitat von edmann

    Gibt es in AutoIT evtl eine Möglichkeit so etwas zu realisieren?


    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:

    [autoit]

    For $item In $operands
    ConsoleWrite($item & @CRLF)
    Next

    [/autoit]

    Auf 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.

  • Funktionen der Skripte im Includeverzeichnis anzeigen

    • BugFix
    • 9. März 2011 um 17:33
    Zitat von Fintan

    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
    # 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
    #------------------------------------------------------------
    Alles anzeigen

    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. ;)

  • AutoIt trägt fehlerhaft ein..

    • BugFix
    • 9. März 2011 um 17:26

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

  • Unterschied zwischen VBS Arrays und AutoIT Arrays

    • BugFix
    • 9. März 2011 um 12:51

    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=condition

    Also 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. :D
    Ich vermute mal, dass sich das hier zu tief in Objekte vergräbt. Aber vielleicht kennt sich da jemand besser aus.

  • Unterschied zwischen VBS Arrays und AutoIT Arrays

    • BugFix
    • 9. März 2011 um 02:07

    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.

  • AutoIt trägt fehlerhaft ein..

    • BugFix
    • 9. März 2011 um 02:00

    Meinst du sowas?

    Spoiler anzeigen
    [autoit]

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

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

    $1_GUI = GUICreate("Registriervorgang", 485, 150, -1, -1)
    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)

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

    GUISetState(@SW_SHOW, $1_GUI)

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    While 1
    $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
    WEnd

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    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

    [/autoit]
  • AutoIt trägt fehlerhaft ein..

    • BugFix
    • 8. März 2011 um 19:21
    Zitat von Deep Volcano

    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. ;)

  • AutoIt trägt fehlerhaft ein..

    • BugFix
    • 8. März 2011 um 17:33

    Oops - Ankerpunkte vergessen :whistling:
    So muß das Pattern lauten:

    Code
    "\A([a-zA-Z0-9]{8,16})\z"
  • StringRegEx mit Rückgabe der Position der Expression

    • BugFix
    • 8. März 2011 um 17:18

    Raupi : "Viele Wege führen nach Rom.." w.z.b.w. :D

    @Jautois: Sorry, dass wir deinen Thread gekapert haben :D - aber war halt ein interessantes Thema. ;)

  • AutoIt trägt fehlerhaft ein..

    • BugFix
    • 8. März 2011 um 16:45

    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

  • StringRegEx mit Rückgabe der Position der Expression

    • BugFix
    • 8. März 2011 um 16:34

    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. :thumbup:

    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|'
    $aOut = _StringRegExpPos($s, '\|((M|D)ein(?:\d{1,3})Test)\|')
    _ArrayDisplay($aOut)

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

    $s = 'A12C23D45E56F67G7H8I9J0'
    $aOut = _StringRegExpPos($s, '\d')
    _ArrayDisplay($aOut)

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

    Func _StringRegExpPos($sString, $sPattern)
    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

    [/autoit]
  • StringRegEx mit Rückgabe der Position der Expression

    • BugFix
    • 8. März 2011 um 14:18
    Zitat von Raupi

    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 :rofl:
    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:

  • StringRegEx mit Rückgabe der Position der Expression

    • BugFix
    • 8. März 2011 um 13:02

    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"

  • StringRegEx mit Rückgabe der Position der Expression

    • BugFix
    • 8. März 2011 um 12:50

    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. :D

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $s = 'aadsadsadasMeinTestasdasdsad|MeinTest|sdasdasd'
    $aOut = _StringRegExpPos($s, '\|(MeinTest)\|')
    _ArrayDisplay($aOut)

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

    Func _StringRegExpPos($sString, $sPattern)
    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

    [/autoit]
  • Windows PROBLEME!

    • BugFix
    • 8. März 2011 um 09:31
    Zitat von chip

    dann kann die Software dahinter nicht wirklich was sein


    Du bist aber böse. :D
    Als die Software entwickelt wurde steckte XP noch im SP1 fest. Und kein Softwarehaus wird freiwillig eine Topsoftware umgestalten nur weil Miniweich der Meinung ist man sollte dem Verbraucher mal wieder ein anderes OS überstülpen. Bekannterweise wurden wir bisher von M$ immer als Beta-Tester mißbraucht. So werden die SW-Firmen auch hier einen Zeitraum abwarten um feststellen zu können, ob ein fehlerfreier Lauf auf dem OS garantiert werden kann. Denn das müssen die Hersteller gegenüber dem Kunden garantieren, sonst können sie ihre SW gleich als Ladenhüter abstellen. ;)

  • Windows PROBLEME!

    • BugFix
    • 7. März 2011 um 22:39
    Zitat von chip

    Jedes Programm das unter XP läuft, läuft auch unter Windows 7 dank kompatibilitätsmodus.


    Kann ich nicht bestätigen. Ich habe deshalb im Virtual PC XP installiert, weil z.B. meine Firmensoftware (Warenwirtschaftssystem) unter 7 gar nicht erst installiert werden kann. Hängt vermutlich an der Installationsroutine und geänderten Registryschlüsseln - nur kann man das als User ja nicht beeinflussen.

  • doppelte Einträge finden: Array, Listview, Stringlist was wäre schneller ?

    • BugFix
    • 6. März 2011 um 14:42

    Wenn die Daten sowieso in einem Listview stehen, macht es wenig Sinn sie in ein Array zu packen um dann zu suchen. Denn dazu nimmst sie ja eh "in die Hand" - dann kannst du auch gleich den Vergleich ausführen.
    Und zum Speichern der Vergleichswerte würde ich dann aber zum Bsp. eine Arraylist ( 'System.Collections.ArrayList' ) verwenden. Denn Abfragen ( $objArrayList.Contains('Wert') ) sind da wesentlich komfortabler als im Standardarray.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™