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

Beiträge von XovoxKingdom

  • HotkeySet nur wenn Win aktiv ist

    • XovoxKingdom
    • 7. August 2011 um 22:39

    Bugfix hat dir doch schon die Lösung gegeben...
    Beim nächsten Mal darfst (=solltest) du uns an deiner nicht funktionierenden
    Lösung teil haben lassen, da dein bisheriger Quelltext 1:1 aus Koda kommt, richtig?

    Hier ist die Lösung (<=> 1 min in der (deutschen) Hilfedatei blättern unter:

    Zitat

    GUISetAccelerators()


    )

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 553, 270, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 104, 112, 345, 89, 0)
    $dummy = GUICtrlCreateDummy()
    Dim $AccelKeys[1][2]=[["{Enter}", $dummy]]
    GUISetAccelerators($AccelKeys)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ;erstmal auskommentiert, damit du sehen kannst,
    ;dass die aktion durch das enterdrücken aktiviert wurde

    ;btnFunc()

    Case $dummy
    btnFunc() ; wird ausgeführt
    EndSwitch
    WEnd

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

    Func btnFunc()
    MsgBox(0,0,"ACTION!")
    EndFunc

    [/autoit]
  • Wie kann ich das X fest machen

    • XovoxKingdom
    • 31. Juli 2011 um 20:40

    Dein (mehrfacher) Aufruf von _IsPressed() sollte mit der vorher geladenen DLL gemacht werden
    (siehe Hilfedatei), aber man kanns ja auch mit GUIGetCursorInfo machen...

    Hier ist mal die angepasste Version [bei dir lags offenbar am select]:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    Local $obenlinks = False
    Local $mittelinks = False
    Local $untenlinks = False
    Local $obenmitte = False
    Local $mittemitte = False
    Local $untenmitte = False
    Local $obenrechts = False
    Local $mitterechts = False
    Local $untenrechts = False

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

    $hWnd = GUICreate("Tic Tac Toe", 315, 315)

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

    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(315, 315, $hGraphics)
    Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)

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

    $hBgBrush = _GDIPlus_BrushCreateSolid(0xFF79ABFF)
    Global $hStrichBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hXOPen = _GDIPlus_PenCreate(0xFF112233, 10)

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

    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    $Pos = GUIGetCursorInfo()

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

    Select
    Case $Pos[2]
    Select
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben links
    $obenlinks = True
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte links
    $mittelinks = True
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten links
    $untenlinks = True

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

    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben mitte
    $obenmitte = True
    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte mitte
    $mittemitte = True
    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten mitte
    $untenmitte = True

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

    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben rechts
    $obenrechts = True
    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte rechts
    $mitterechts = True
    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten rechts
    $untenrechts = True
    EndSelect
    EndSelect

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

    _GDIPlus_GraphicsFillRect($hBuffer, 0, 0, 315, 315, $hBgBrush)

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

    If $obenlinks Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 10, 10, 90, 90, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 90, 10, 10, 90, $hXOPen)
    EndIf
    If $mittelinks Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 10, 115, 90, 195, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 90, 115, 10, 195, $hXOPen)
    EndIf
    If $untenlinks Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 10, 220, 90, 300, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 90, 220, 10, 300, $hXOPen)
    EndIf

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

    If $obenmitte Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 115, 10, 195, 90, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 195, 10, 115, 90, $hXOPen)
    EndIf
    If $mittemitte Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 115, 115, 195, 195, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 195, 115, 115, 195, $hXOPen)
    EndIf
    If $untenmitte Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 115, 220, 195, 300, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 195, 220, 115, 300, $hXOPen)
    EndIf

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

    If $obenrechts Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 220, 10, 300, 90, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 300, 10, 220, 90, $hXOPen)
    EndIf
    If $mitterechts Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 220, 115, 300, 195, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 300, 115, 220, 195, $hXOPen)
    EndIf
    If $untenrechts Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 220, 220, 300, 300, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 300, 220, 220, 300, $hXOPen)
    EndIf

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

    _GitterZeichnen()
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, 315, 315)
    Until $msg = -3

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

    Func _GitterZeichnen()
    _GDIPlus_GraphicsFillRect($hBuffer, 100, 0, 5, 315, $hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer, 205, 0, 5, 315, $hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer, 0, 100, 315, 5, $hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer, 0, 205, 315, 5, $hStrichBrush)
    EndFunc ;==>_GitterZeichnen

    [/autoit]
  • WinGetPos, coords für FensterINHALT

    • XovoxKingdom
    • 29. Juli 2011 um 10:14

    Du solltest einen relevanten Codeteil bzw. den gesamten Code posten, damit "jemand"
    nachvollziehen kann, warum es offenbar nicht klappt.

  • Regex Fragen an Experten

    • XovoxKingdom
    • 28. Juli 2011 um 17:08

    Es geht bestimmt auch effizienter, aber es klappt zumindest:

    Code
    (?:(?:Vorname)|(?:Strasse))\s(.+)


    bringt dir den Vornamen oder die Straße (logisches oder).
    ?: bildet eine Gruppe, die aber selbst nicht als "Ergebnis" zählt.

    Zitat

    1. Wie kann ich alle Vornamen oder Strassen anzeigen? (Vornamen und Strassen)


    -siehe oben

    Zitat

    2. Wenn [] gesetzt wurden verschwindet der erste Buchstabe? Wieso?


    [...] bildet eine Menge die ohne Quantifizierer genau ein Element dieser Menge beschreibt.
    Auf Deutsch: Es muss nur irgendein Element der Menge vorkommen und passen.
    Da du es nicht via (...) zur Ausgabe führst, wird es nicht angezeigt.
    Der Rest ist dann logischerweise der String ohne das erste Zeichen und wird via (.+) angezeigt.

    Zitat

    3. Verwende ich: Suche nach,oder [Vorname|Strasse] dann wird alles gezeigt!


    Du hast vorher keine Menge gebildet vor bzw. nach der der tatsächlich gesuchte String
    gefiltert werden soll, also wird Regex nur das eine Zeichen davor nehmen!

    Zitat

    4. Zeile alles außer Vornamen und Nachnamen...


    derzeit noch keine Lösung parat...

    Ich hoffe die Antworten helfen und sind einigermaßen richtig ;)

  • WinGetPos, coords für FensterINHALT

    • XovoxKingdom
    • 28. Juli 2011 um 16:27

    Dieses Beispiel sollte helfen:

    [autoit]

    $form1 = GUICreate("I'm a window")
    GUISetState()

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

    $aPos = WinGetCaretPos()
    $aSize = WinGetClientSize($form1)

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

    MouseMove($aPos[0],$aPos[1],10)
    MouseMove($aPos[0]+$aSize[0],$aPos[1],50)
    MouseMove($aPos[0]+$aSize[0],$aPos[1]+$aSize[1],50)
    MouseMove($aPos[0],$aPos[1]+$aSize[1],50)
    MouseMove($aPos[0],$aPos[1],50)

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

    While GUIGetMsg()<>-3 And Sleep(1)
    WEnd

    [/autoit]
  • Wenn Zahl durch 8 teilbar, dann...

    • XovoxKingdom
    • 22. Juli 2011 um 08:31

    Jop wunderbar funktioniert tadellos :thumbup:
    Für die Zukunft werd ich mir StringFormat genauer anschauen müssen :)

  • Wenn Zahl durch 8 teilbar, dann...

    • XovoxKingdom
    • 21. Juli 2011 um 22:40

    Ich hätte da mal ne Frage:
    Warum zeigt mir die Msgbox zwei "gleiche" Werte an, obwohl die Werte offenbar nicht identisch sind?
    Werden die Nachkommastellen zwar berechnet, aber nicht angezeigt?
    Wenn ja, wie kann ich die Genauigkeit so einstellen, dass ich alle berechneten Stellen zu sehen bekomme?

    Simples Beispiel, das ohne Rundungsfehler auch ohne Round(...) auskommen müsste - oder zumindest nicht
    die selben Ergebnisse liefern.

    [autoit]

    For $i=0 To 1000 ; 1001 testwerte die fast alle 'ungleich' seien sollen
    $a = Random(1,100000,1)
    $b = Random(1,100000,1)
    If Mod($a,$b) <> myMod($a,$b) Then MsgBox(0,"Ungleich",$a&", "&$b&@CRLF&Mod($a,$b)&@CRLF&myMod($a,$b))
    ;Da die MsgBox ausgeführt wird, nehme ich an, dass intern mehr Nachkommastellen berechnet werden, aber NICHT angezeigt, warum?
    Next

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

    Func myMod($a,$b)
    ; mit Round(...) klappts tadellos
    Return $b * ($a/$b - Floor($a/$b))
    EndFunc

    [/autoit]
  • neues wissen neue frage --> warten auf situation

    • XovoxKingdom
    • 15. Juli 2011 um 22:48

    Hmm.. spontan würde mir da nur eine Lösung via Threads einfallen:
    Es müsste ein Thread gestartet werden, der die Laufzeit einer Funktion misst und diese
    nach dem Abbruchkriterium vom 30sek. zum Terminieren forciert.
    Threads sind mir allerdings in AutoIt nicht bekannt :S
    Es gab/gibt jedoch ein paar Themen dazu -> einfach mal googlen.

    Anders wäre es glaub ich nicht möglich die Laufzeit eines Algorithmus zu bestimmen,
    ohne nach (unglaublich) vielen (und möglichst) kleinen Berechnungsschritten die Prüfung vorzunehmen.

    Obwohl ich deinen bisherigen Code nicht kenne, würde ich dir eine Modularisierung von Codeblöcken vorschlagen,
    die kurze Anweisungsschritte haben und somit schnell terminieren können, oder andernfalls notgedrungen einen
    @error werfen können.

    Ich muss zugeben, dass die ständige Überprüfung der Variablen nicht so schön ist.

    Letzter Einfall: Adlibregister
    Du kannst in einer Variablen die aktuelle Position (Funktionsname) speichern und bei einem
    error die Funktion speichern, damit du später diesen Fehler beheben kannst.
    Die Zeitmessung von 30 Sekunden kannst du damit auch realisieren, indem du beim ersten
    Funktionsaufruf TimerInit() startest und bei allen Folgeaufrufen bis 30 Sek die Zeit prüfst.
    Danach muss TimerInit() erneut aufgerufen werden ...

    Vielleicht hilft dir der eine oder andere Tipp weiter ;)

  • neues wissen neue frage --> warten auf situation

    • XovoxKingdom
    • 15. Juli 2011 um 22:28

    Ich denke dieses Beispiel sollte den Testfall abdecken:

    Spoiler anzeigen
    [autoit]

    #Include <ScreenCapture.au3>

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

    $dateiname = "Errorpic" ; Dateiname
    $id = 1 ; Dateiid

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

    $keinFehler = True; noch gibt es keinen fehler

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

    HotKeySet("{1}","errortest")
    Func errortest()
    $keinFehler = False ; Fehler wird aktiviert
    EndFunc
    #cs
    Dient der Demonstration: Wenn "1" gedrückt wird, dann wird ein Fehler simuliert
    Später sollte dein Programm in der while schleife den Fehlercode setzen
    #ce

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

    While true
    ; ...hier würde dein Code stehen
    Sleep(10)
    ;...
    If $keinFehler = False Then ExitLoop
    WEnd

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

    #cs
    Alternative

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

    while $keinFehler
    ...
    wend

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

    #ce

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

    While FileExists(@ScriptDir&"\"&$dateiname&$id&".jpg") ; solange Datei existiert=> erhöhe id
    $id += 1
    WEnd

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

    _ScreenCapture_Capture(@ScriptDir&"\"&$dateiname&$id&".jpg") ; speichert den Screenshot im aktuellen Verzeichnis

    [/autoit]
  • CSV-Dateien lesen und verarbeiten

    • XovoxKingdom
    • 12. Juli 2011 um 19:40

    Hallo Techmix,
    leider wird mit deiner leichten Variaten die Msgbox angezeigt (d.h. es existiert ein Fehler),
    aber SetError(4) wird nicht wie erwartet ausgeführt (-> Funktion wird nicht beendet).
    Abhilfe (mit der ich mich nicht zufrieden gebe) wäre statt Seterror ein Return, aber das kann
    ja nicht gewollt sein!

    PS: Hier nochmal der Inhalt der Testdatei:

    Code
    Zeile1Wert1;Zeile1Wert2;Zeile1Wert3;Zeile1Wert4;Zeile1Wert5 
    Zeile2Wert1;Zeile2Wert2;Zeile2Wert3;Zeile2Wert4;Zeile2Wert5 
    Zeile2Wert1;Zeile2Wert2;Zeile2Wert3;Zeile2Wert4;Zeile2Wert5
    Zeile3Wert1;Zeile3Wert2;Zeile3Wert3;Zeile3Wert4;Zeile3Wert5;Zeile3Wert6

    EDIT: Man muss Return SetError(..) schreiben :whistling:
    Geheiligt sei die magische Hilfedatei und die Fähigkeit in ihr zu Lesen!

  • CSV-Dateien lesen und verarbeiten

    • XovoxKingdom
    • 12. Juli 2011 um 18:18

    Ich hab auch einen CSV Splitter, der jedoch "automatisch" die richtige Spaltenanzahl (= vom ersten Element ausgehend)
    übernimmt.
    Leider gibt es einen Fehler den ich nicht ganz verstehe:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>

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

    Func ReadCSVtoArray($sFilePath, $cDelimiter=";")
    Local $maxColumns = 0
    $hFile = FileOpen($sFilePath,0)
    If @error Then Return SetError(1)
    $sContent = FileRead($hFile)
    FileClose($hFile)
    $aRows = StringSplit(StringStripCR($sContent), @LF)
    If IsArray($aRows) = False Then Return SetError(2)
    $aItem = StringSplit($aRows[1], $cDelimiter)
    If IsArray($aItem) = False Then Return SetError(3)
    $maxColumns = $aItem[0]
    Dim $aOut[$aRows[0]][$maxColumns]
    For $r = 1 To $aRows[0]
    $aItem = StringSplit($aRows[$r], $cDelimiter)
    If IsArray($aItem) = False Then Return SetError(3)
    If (Number($aItem[0]) > Number($maxColumns)) Then ; Zeile 18
    Return SetError(4)
    MsgBox(0,"Error?",$aItem[0] > $maxColumns) ; zeigt true an, sollte aber bei true nicht sichtbar sein!
    endif

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

    For $c = 1 To $aItem[0]
    $aOut[$r - 1][$c - 1] = $aItem[$c]
    Next
    Next
    Return $aOut
    EndFunc

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

    $a = ReadCSVtoArray(@ScriptDir&"\content.txt") ;Inhalt ist der aus Post1, wobei in Zeile 4 ein weiteres Item hinzugefügt wurde
    $e = @error
    If $e Then
    MsgBox(0,"Error: ",$e)
    Else
    _ArrayDisplay($a)
    EndIf

    [/autoit]

    Zeile 19 wird mit True ausgegeben und danach sagt mir die Console:
    "Array variable has incorrect number of subscripts or subscript dimension range exceeded"
    aber genau das sollte ja durch Zeile 18 (wenns wahr wird) verhindert werden.
    Habe ich einen Denkfehler?
    Eigentlich sollte er via Seterror die Funktion direkt terminieren! :S

    EDIT: Ich hab das Return vor Seterror unterschlagen :pinch:

  • String auslesehn und Sortieren

    • XovoxKingdom
    • 6. Juli 2011 um 20:28

    name22 hat es doch bereits gesagt: Nimm StringReplace(...)
    So hättest du es machen können:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>

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

    $sStringList = "182.157.114.242" & @CRlF & _
    "169.179.73.49" & @CRlF & _
    "236.67.207.123" & @CRlF & _
    "46.117.132.132" & @CRlF & _
    "37.27.128.42" & @CRlF & _
    "241.223.127.117" & @CRlF & _
    "172.159.20.53" & @CRlF & _
    "119.88.186.90" & @CRlF & _
    "37.35.210.27" & @CRlF & _
    "188.66.154.138" & @CRlF & _
    "91.86.175.30" & @CRlF & _
    "38.245.222.37" & @CRlF & _
    "224.118.160.33" & @CRlF & _
    "3.142.173.24" & @CRlF & _
    "180.200.125.26" & @CRlF & _
    "58.97.251.103" & @CRlF & _
    "21.215.134.249" & @CRlF & _
    "40.185.204.209" & @CRlF & _
    "199.125.238.203" & @CRlF & _
    "148.183.236.174" & @CRlF & _
    "134.169.32.4" & @CRlF & _
    "248.191.54.13" & @CRlF & _
    "124.128.1.128" & @CRlF & _
    "149.96.77.181" & @CRlF & _
    "21.238.195.165" & @CRlF & _
    "206.165.212.172" & @CRlF & _
    "186.248.144.36" & @CRlF & _
    "254.56.5.27" & @CRlF & _
    "161.46.79.124" & @CRlF & _
    "175.151.57.210" & @CRlF & _
    "44.211.187.238" & @CRlF & _
    "46.19.37.49" & @CRlF & _
    "86.218.54.126" & @CRlF & _
    "208.38.66.36" & @CRlF & _
    "78.100.31.238" & @CRlF & _
    "98.170.21.174" & @CRlF & _
    "94.176.222.207" & @CRlF & _
    "23.27.139.2" & @CRlF & _
    "253.210.223.41" & @CRlF & _
    "73.3.137.12" & @CRlF & _
    "48.230.204.186" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "71.25.98.252" & @CRlF & _
    "121.27.159.167" & @CRlF & _
    "176.231.197.221" & @CRlF & _
    "226.108.162.198" & @CRlF & _
    "27.193.244.168" & @CRlF & _
    "40.87.89.196" & @CRlF & _
    "73.55.241.90" & @CRlF & _
    "229.103.133.222" & @CRlF & _
    "250.245.206.134" & @CRlF & _
    "181.83.64.200" & @CRlF & _
    "69.162.189.55" & @CRlF & _
    "130.16.81.94" & @CRlF & _
    "31.168.134.133" & @CRlF & _
    "138.33.25.7" & @CRlF & _
    "132.55.110.13" & @CRlF & _
    "72.52.137.87" & @CRlF & _
    "57.4.21.124" & @CRlF & _
    "170.21.50.24" & @CRlF & _
    "225.104.253.244" & @CRlF & _
    "16.73.228.9" & @CRlF & _
    "65.251.234.192" & @CRlF & _
    "31.135.77.147" & @CRlF & _
    "136.221.147.175" & @CRlF & _
    "170.213.172.226" & @CRlF & _
    "83.90.217.172" & @CRlF & _
    "3.128.99.42" & @CRlF & _
    "179.133.81.12" & @CRlF & _
    "54.49.134.121" & @CRlF & _
    "78.52.21.166" & @CRlF & _
    "15.201.90.27" & @CRlF & _
    "52.29.165.36" & @CRlF & _
    "9.176.11.74" & @CRlF & _
    "117.8.25.195" & @CRlF & _
    "129.165.193.108" & @CRlF & _
    "139.51.126.57" & @CRlF & _
    "249.206.118.202" & @CRlF & _
    "248.214.174.51" & @CRlF & _
    "153.220.49.57" & @CRlF & _
    "55.166.94.241" & @CRlF & _
    "144.166.17.167" & @CRlF & _
    "144.196.52.131" & @CRlF & _
    "231.83.158.17" & @CRlF & _
    "28.102.18.181" & @CRlF & _
    "236.38.62.130" & @CRlF & _
    "236.38.62.130" & @CRlF & _
    "236.38.62.130" & @CRlF & _
    "236.38.62.130" & @CRlF & _
    "236.38.62.130" & @CRlF & _
    "236.38.62.130" & @CRlF & _
    "236.38.62.130" & @CRlF & _
    "236.38.62.130" & @CRlF & _
    "236.38.62.130" & @CRlF & _
    "237.127.226.26" & @CRlF & _
    "241.17.241.238" & @CRlF & _
    "41.89.71.61" & @CRlF & _
    "179.91.204.214" & @CRlF & _
    "58.82.21.163" & @CRlF & _
    "20.218.149.252" & @CRlF & _
    "154.50.168.6" & @CRlF & _
    "44.66.142.183" & @CRlF & _
    "221.41.90.61" & @CRlF & _
    "115.56.219.119" & @CRlF & _
    "216.120.134.39" & @CRlF & _
    "210.230.53.108" & @CRlF & _
    "33.251.12.161" & @CRlF & _
    "230.82.136.156" & @CRlF & _
    "40.185.217.211" & @CRlF & _
    "54.42.206.98"

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

    $sSearchString = "236.38.62.130"

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

    StringReplace($sStringList, $sSearchString, "")

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

    $iReplacements = @extended

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

    MsgBox(0, "Replacements:", $iReplacements)

    [/autoit]
  • AdlibRegister mit sofortiger Ausführung der Funktion?

    • XovoxKingdom
    • 20. Juni 2011 um 23:11

    Ich nehme an, dass dich der erneute Aufruf stört, da du des öfteren AdlibRegister aufrufst
    und (fast) immer einen sofortigen Funktionsaufruf haben willst...

    Dies sollte helfen:

    Spoiler anzeigen
    [autoit]

    AdlibRegisterEx("writeConsole",10000,True) ; Aufruf mit sofortiger Wirkung

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

    For $i=0 To 1 ; Pause, damit der Effekt "wirken" kann
    Sleep(20000)
    Next
    AdlibUnRegister()

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

    Func writeConsole() ; Beispielfunktion
    ConsoleWrite("."&@CRLF)
    EndFunc

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

    ; sollte intuitiv verständlich sein:
    Func AdlibRegisterEx($sFunc, $iTime = 250, $bInstantCall = False)
    If $bInstantCall Then Call($sFunc)
    AdlibRegister($sFunc, $iTime)
    EndFunc

    [/autoit]
  • Text markieren Problem

    • XovoxKingdom
    • 17. Juni 2011 um 23:10

    Du musst einfach einen Accelerator auf strg+a setzen:

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    #Include <GuiEdit.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("BadEdit", 1267, 951, 2, 0)
    $MenuItem4 = GUICtrlCreateMenu("Datei")
    $MenuItem5 = GUICtrlCreateMenuItem("Neue Datei", $MenuItem4)
    $MenuItem6 = GUICtrlCreateMenuItem("Öffnen", $MenuItem4)
    $MenuItem65 = GUICtrlCreateMenuItem("Speichern", $MenuItem4)
    $MenuItem14 = GUICtrlCreateMenuItem("Drucken", $MenuItem4)
    $MenuItem7 = GUICtrlCreateMenu("Bearbeiten")
    $MenuItem1 = GUICtrlCreateMenuItem("Einfügen", $MenuItem7)
    $MenuItem10 = GUICtrlCreateMenuItem("Kopieren", $MenuItem7)
    $MenuItem11 = GUICtrlCreateMenuItem("Wort suchen", $MenuItem7)
    $MenuItem55 = GUICtrlCreateMenu("Hilfsprogramme")
    $MenuItem82 = GUICtrlCreateMenuItem("Dateien vergleichen", $MenuItem55)
    $MenuItem3 = GUICtrlCreateMenu("Einstellungen")
    $MenuItem8 = GUICtrlCreateMenuItem("Schrift", $MenuItem3)
    $MenuItem12 = GUICtrlCreateMenuItem("GUI", $MenuItem3)
    $MenuItem12 = GUICtrlCreateMenuItem("Modus", $MenuItem3)
    $MenuItem9 = GUICtrlCreateMenu("Ansicht")
    $MenuItem2 = GUICtrlCreateMenuItem("Zoom", $MenuItem9)
    $MenuItem15 = GUICtrlCreateMenu("Hilfe")
    $Edit1 = GUICtrlCreateEdit("", 0, 0, 1257, 921)
    $StrgA = GUICtrlCreateDummy()
    Dim $AccelKeys[1][2]=[["^a", $StrgA]] ; Accelerator für Strg + a
    GUISetAccelerators($AccelKeys)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $MenuItem5
    GUICtrlSetData(-1, "")
    Case $MenuItem6
    $Suche = FileOpenDialog("Dateisuche","C:\" ,"(*.txt)" )
    $Lesen = Fileread($Suche)
    GUICtrlSetData($Edit1,$Lesen)
    Case $MenuItem65
    $Suche = FileSaveDialog("Speichern","C:\" ,"(*.txt)")
    FileWrite($Suche & ".txt",GuiCtrlRead($Edit1))
    Case $MenuItem14
    $Schreiben = FileWrite("Zwischenlagerung.txt",GuiCtrlRead($Edit1))
    _FilePrint("Zwischenlagerung.txt")
    Case $MenuItem1
    ControlSend("BadEdit", "", $Edit1, "^v")
    Case $MenuItem10
    ControlSend("BadEdit", "", $Edit1, "^a") ; Das ist die Problemzeile
    Case $StrgA
    _GUICtrlEdit_SetSel($Edit1, 0, -1) ; markiert kompletten Text
    ;ClipPut(GUICtrlRead($Edit1)) ;falls Text auch kopiert werden soll
    EndSwitch
    WEnd

    [/autoit]
  • Gui Tabs einzeln löschen

    • XovoxKingdom
    • 13. Juni 2011 um 09:55

    Hier ist meine Lösung dafür, die jedoch weder kleine "x" zeichnet,
    noch bei ausgewählten Tabs funktioniert...
    Vielleicht reicht dieser Ansatz ja für weiteres:

    Spoiler anzeigen
    [autoit]

    #include <GuiTab.au3>
    #include <GUIConstantsEx.au3>

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 615, 440, 192, 124)
    $Tab1 = GUICtrlCreateTab(80, 80, 481, 305)
    ;ggf. kann man via GDI+ ein kleines "x" auf die Tabs zeichnen!?
    Local $tabitems[10] = [ _
    GUICtrlCreateTabItem("Eins") , _
    GUICtrlCreateTabItem("Zwei") , _
    GUICtrlCreateTabItem("Drei") , _
    GUICtrlCreateTabItem("Vier") , _
    GUICtrlCreateTabItem("Fünf"), _
    GUICtrlCreateTabItem("sechs") , _
    GUICtrlCreateTabItem("sieben") , _
    GUICtrlCreateTabItem("acht") , _
    GUICtrlCreateTabItem("neun") , _
    GUICtrlCreateTabItem("zehn")]
    GUICtrlCreateTabItem("")
    $Button1 = GUICtrlCreateButton("Button1", 456, 40, 75, 25)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg(1) ; Arrayvariante
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Tab1 ; Wird _nur_ bei nicht fokussierten, angeklickten Tabs aufgerufen!
    $nMsg[3] -= 80 ; 80 ist x-Position vom Tab
    $nMsg[4] -= 80 ; 80 ist y-Position vom Tab
    For $i=0 To _GUICtrlTab_GetItemCount($Tab1)-1 ; alle Tabs überprüfen
    $pos = _GUICtrlTab_GetItemRect($Tab1,$i) ; Position des aktuellen Tabs
    $x = Abs($nMsg[3]+5-$pos[2]) ; Abstand vom Rechten Rand zum Mausklick ermitteln
    $y = Abs($nMsg[4]+8-$pos[3]) ; die Summanden (x: 5, y: 8) sind durchs !Testen! entstanden
    If $x < 4 And $y < 8 Then
    ; Falls der Abstand vom Mausklick und rechter Rand ziemlich gering ist
    ; Auch diese Werte (4,8) sind "ertestet" und müssen ggf. angepasst werden!
    _GUICtrlTab_DeleteItem($Tab1,_GUICtrlTab_GetCurSel($Tab1)) ; löscht aktuelles
    _GUICtrlTab_SetCurSel($Tab1,0) ; aktiviert das erste
    ExitLoop
    EndIf
    Next

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

    Case $Button1
    MsgBox(4160, "Information", "Lösche TAB ")
    ;For $i = 2 To UBound($tabitems) - 1
    _GUICtrlTab_DeleteItem($Tab1, 3)
    ;Next
    EndSwitch
    WEnd

    [/autoit]


    PS: Vorschläge:
    -Mit GDI+ kann man (wahrscheinlich) kleine "x"'e zeichnen
    -Im switch($nMsg) könnte man im Else Teil die Position nochmal
    überprüfen und somit auch das aktive Tab schließen lassen

  • Position eines Icons auf dem Desktop ermitteln

    • XovoxKingdom
    • 13. Juni 2011 um 09:32

    Bei mir (siehe letzter Post Infos zu OS) heißt der Desktop so...
    Du kannst es via AutoItinfotool herausfinden und ggf. anpassen, da ich nicht
    weiß wie er bei anderen OS heißt.
    Die Controlgethandle-Funktion muss dann selbstverständlich auch angepasst werden.
    Welches OS hast du denn?

  • Position eines Icons auf dem Desktop ermitteln

    • XovoxKingdom
    • 12. Juni 2011 um 22:42

    Probier mal folgendes Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    If Not WinActive("Program Manager") Then WinActivate("Program Manager")
    $hwnd = ControlGetHandle("Program Manager", "", "SysListView321")
    $hwnd = HWnd($hwnd)
    WinMinimizeAll()
    For $i = 0 To _GUICtrlListView_GetItemCount($hwnd) - 1
    $pos = _GUICtrlListView_GetItemPosition($hwnd, $i)
    If IsArray($pos) Then
    ; Icongröße ist bei mir 48x48 und er ist bei mir ~ 6 Pixel über dem Feld =>
    ; 48x54, damit man nun die Mitte hat :2 rechnen => 24x27 jeweils hinzufügen:
    MouseMove($pos[0] + 24, $pos[1] + 27)
    EndIf
    Sleep(100)
    Next

    [/autoit]


    PS: Testsystem = Windows 7 x64 @ 1680 x 1050 Auflösung mit Standard Design
    - ist vllt. wichtig für die Anvisierung der Icons (bei mir ist es mit dem Beispiel mittig) ;)

  • Input mit Enter auslesen

    • XovoxKingdom
    • 11. Juni 2011 um 18:30

    Wenn du den Fall des Enterdrückens in dem Inputcontrol bei leerem Input
    nicht brauchst / nicht drauf reagieren willst, dann sollte folgende Lösung
    genügen:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Simple Input Example", 281, 96, 192, 124)
    $Label1 = GUICtrlCreateLabel("Press Enter if _not_Empty_ Inputcontrol has focus...", 10, 16, 253, 17)
    $Input1 = GUICtrlCreateInput("", 32, 40, 217, 21)
    $Label2 = GUICtrlCreateLabel("", 94, 74, 56, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Input1
    GUICtrlSetData($Label2,"Thank you!")
    Sleep(1000)
    For $i=255 To 0 Step -2
    WinSetTrans($Form1,"",$i)
    Sleep(1)
    Next
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • StringRegExp treibt mich in den Wahnsinn

    • XovoxKingdom
    • 5. Juni 2011 um 14:06

    Zunächst wäre es gut zu wissen, ob der URL-Aufbau konstant ist, da ein Muster sonst ggf. nicht immer trifft.
    Sollte es immer wie folgt Aussehen:
    http://www.Adresse.Domain/konstanterName/jahr/Monat/hier_die_wichtige_Info/abHierNixMehr
    dann könnte mein zweites Muster (oder nach kleiner Modifikation des ersten) genügen.

    [autoit]

    Global $Test
    Global $Beispiel[5]

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

    $Beispiel[1] = "http://beispiel.de/test/2011/12/diese-buchstaben-zahlen12-und-zeichen"
    $Beispiel[2] = "http://beispiel.de/test/2011/12/diese-buchstaben-zahlen12-und-zeichen/"
    $Beispiel[3] = "http://beispiel.de/test/2011/12/diese-buchstaben-zahlen12-und-zeichen/das-hier-nicht"
    $Beispiel[4] = "https://testseite.de/blablabla/2012/02/diese-buchstaben-zahlen12-und-zeichen/das-hier-nicht" ; beispiel, bei dem Test1 versagt

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

    For $i = 1 to 4
    ; alternativ auch mit _StringBetween möglich, ist ja fast das selbe
    $Test1 = StringRegExp($Beispiel[$i],"http://beispiel.de/test/2011/12/([^/]+).*",1)
    ;kryptischere Variante
    $Test2 = StringRegExp($Beispiel[$i],"https?://[^/]+/[^/]*/\d{4}/\d{2}/([^/]+).*",1)
    If IsArray($Test1) Then
    ConsoleWrite(@CRLF & "Test1 :: Beispiel" & $i & ": " & $Test1[0] & @CRLF)
    EndIf
    If IsArray($Test2) Then
    ConsoleWrite(@CRLF & "Test2 :: Beispiel" & $i & ": " & $Test2[0] & @CRLF)
    EndIf
    Next

    [/autoit]


    Edit: Zu langsam und zusätzlich noch eine unschönere Lösung :whistling:

  • Frage - Antwort Script

    • XovoxKingdom
    • 5. Juni 2011 um 13:48

    Hier ist nochmal eine überarbeitete Variante, die nun auch mehrere Lösungen zulässt, wobei
    der Benutzer immernoch nur !eine! Lösung eingibt.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>

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

    #cs
    Kurze Erklärung:
    Das Array $aFragen speichert die 1-basierte Antwort in der zweiten Spalte.
    Die erste Spalte trägt offensichtlich die Fragestellung.
    Bsp.: Will man die 4te Antwort aus dem $aAntworten-Array speichern, so müsste eine 4 da stehen.
    Gibt es mehrere Antworten, so müssen sie durch Kommata (ohne Leerschritt) getrennt werden!

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

    Der Rest sollte klar sein.

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

    PS: Ich würde an deiner Stelle die Fragen und Antworten in Inidateien auslagern.
    #ce

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

    Dim $aFragen[3][2] = [ _
    ["Welche Farbe hat eine rote Ampel?", "1"] , _ ; Antwort 1 aus dem $aAntworten-Array trifft zu
    ["Wieviele Fußballspieler stehen in einer Partie für gewöhnlich auf dem Feld?" , "2"], _
    ["Nenne eine der Farben: grün, rot oder blau" , "1,3,4"] _ ; Antwort 1 oder 3 oder 4 trifft hier zu
    ]

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

    Dim $aAntworten[4] = [ _
    "rot", _;Antwort 1
    "22" , _
    "grün" , _ ;Antwort 3
    "blau" _ ;Antwort 4
    ]
    $iDurchgaenge = 2 ;ist die Anzahl der Fragestellungen
    $iZaehler = 0 ;zählt bereits gestellte Fragen
    $iRichtigeAntworten = 0 ;zählt richtige Antworten
    $bRichtigeAntwort = False
    $sAntwort = "" ;speichert die richtige Antwort, oder bei mehreren nach folgendem Muster: Antwort1 oder Antwort2 oder ...
    Do
    $iZaehler += 1
    $iAktuelleFrage = Random(0,UBound($aFragen)-1,1)
    $sEingabe = InputBox("Frage Nr. " & $iZaehler, $aFragen[$iAktuelleFrage][0])
    $aAntwortAuswahl = StringSplit($aFragen[$iAktuelleFrage][1],",")
    $bRichtigeAntwort = False
    $sAntwort = ""
    For $i=1 To $aAntwortAuswahl[0]
    $sAntwort &= $aAntworten[$aAntwortAuswahl[$i]-1]&" oder "
    If $sEingabe = $aAntworten[$aAntwortAuswahl[$i]-1] Then
    $bRichtigeAntwort = True
    EndIf
    Next
    $sAntwort = StringTrimRight($sAntwort,6)
    If $bRichtigeAntwort = True Then
    MsgBox(0,"Richtig","Antwort ist : " & $sAntwort)
    $iRichtigeAntworten += 1
    Else
    MsgBox(0,"Leider Falsch","Antwort ist : " & $sAntwort)
    EndIf
    Until $iZaehler >= $iDurchgaenge
    MsgBox(0,"Auswertung","Du hast " & $iRichtigeAntworten & " richtige Antwort(en) zu insgesamt " & $iDurchgaenge & _
    " Fragen gegeben, und lagst somit zu " & Round($iRichtigeAntworten/$iDurchgaenge*100,2) & " % richtig!")

    [/autoit]

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™