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

Beiträge von eukalyptus

  • µit - März

    • eukalyptus
    • 10. April 2009 um 14:00

    Ich hab auch Probleme mit dem 5ten BT-Sudoku!
    Kannst du deins bitte posten, dann tausch ich es beim Benchmark aus.

    lgE

    EDIT: Ich hab jetzt einfach das 5 (4 in der Ini) gelöscht und hinten ein leeres angehängt.
    Es ist ja auch interessant, wie lange ein BT hierfür braucht...

    Neue INI:

    Spoiler anzeigen

    [LG]
    0=000670900360005028805002100020506004009407000700100583070054261000703000084090050
    1=628009000109056004500872001900510467807000030060020900004907103000201709091000280
    2=076930000000108400300026000045080130010567090200310058068002005704000982020003710
    3=120500360300009020007208004019000873403897001002350400000000087850016900200980140
    4=906020100020050460000009730004260070700030608030871204800700041213000090490308006
    5=007000300050908004900030060070004080102070900000500006800010000000000405060007000
    6=060070008900104070003000500200007000008050906030900020000600010805000000000030007
    7=000000000005010700070602090009020800060835010004070500030408020001090400000000000
    8=004010050050900208300006000020000100000403000005000060000700005901004030070060900
    9=500000006004902010070050900020004060900060803007100000000080200401000000000006070
    [BT]
    0=000000103000050000000000800060020070001000000000300000000001460720000050000800000
    1=100050000006009000080200004040030008007000060900000100030800002000004050000010700
    2=000300800640800050805000001500070206000090000209080005400000709020008013007005000
    3=050060001004800070800000052200057030000000000030690005790000008010006500500030060
    4=000000000005010700070602090009020800060835010004070500030408000001090400000000000
    5=060090050000050609000362000006005700982030546003600100000246000601070308050010060
    6=007000000000010000000040005000008900400000000906007000008609000000000050030000040
    7=530070000600005000098000060800060003400803001700020006060000280000400005000080079
    8=100050000006009000080200004040030008007000060900000100030800002000004050000010700
    9=000000000000000000000000000000000000000000000000000000000000000000000000000000000

    Mein aktueller Benchmark:

    Spoiler anzeigen

    Sudoku Logisch 1 Richtig - Benötigte Zeit: 75.3657238559649
    Sudoku Logisch 2 Richtig - Benötigte Zeit: 74.6170253481937
    Sudoku Logisch 3 Richtig - Benötigte Zeit: 75.222409552052
    Sudoku Logisch 4 Richtig - Benötigte Zeit: 75.9213810693817
    Sudoku Logisch 5 Richtig - Benötigte Zeit: 74.7234634569477
    Sudoku Logisch 6 Richtig - Benötigte Zeit: 159.986534601465
    Sudoku Logisch 7 Richtig - Benötigte Zeit: 158.99925828562
    Sudoku Logisch 8 Richtig - Benötigte Zeit: 183.081648645289
    Sudoku Logisch 9 Richtig - Benötigte Zeit: 157.39235014506
    Sudoku Logisch 10 Richtig - Benötigte Zeit: 157.207410439036

    Ergebnis Logisch: Zeit gesammt: 1192.51720539901 Zeit Durchschnitt: 119.251720539901

    Sudoku Backtrack 1 Richtig - Benötigte Zeit: 1246.10585982297
    Sudoku Backtrack 2 Richtig - Benötigte Zeit: 4943.8973389076
    Sudoku Backtrack 3 Richtig - Benötigte Zeit: 377.846905123416
    Sudoku Backtrack 4 Richtig - Benötigte Zeit: 4305.27231812982
    Sudoku Backtrack 5 Richtig - Benötigte Zeit: 327.588562233468
    Sudoku Backtrack 6 Richtig - Benötigte Zeit: 186.952811041627
    Sudoku Backtrack 7 Richtig - Benötigte Zeit: 1707.07869296237
    Sudoku Backtrack 8 Richtig - Benötigte Zeit: 248.017275938702
    Sudoku Backtrack 9 Richtig - Benötigte Zeit: 4948.56944108818
    Sudoku Backtrack 10 Richtig - Benötigte Zeit: 779.482029140575

    Ergebnis Logisch: Zeit gesammt: 1192.51720539901 Zeit Durchschnitt: 119.251720539901
    Ergebnis Backtrack: Zeit gesammt: 19070.8112343887 Zeit Durchschnitt: 1907.08112343887
    Ergebnis gelöste Sudokus: 20

    lgE

  • µit - März

    • eukalyptus
    • 9. April 2009 um 17:49

    So hab jetzt mein Script mal überarbeitet und es ist viel schneller, als vorher :)
    jedoch löse ich z.z. nichtmal die Hälfte der Sudokus :(

    Aber es ist ja noch etwas Zeit ;)

    Mein aktueller Benchmark:

    Spoiler anzeigen

    Sudoku Logisch 1 Richtig - Benötigte Zeit: 65.7804274006892
    Sudoku Logisch 2 Richtig - Benötigte Zeit: 64.5132272397749
    Sudoku Logisch 3 Richtig - Benötigte Zeit: 64.5336208931582
    Sudoku Logisch 4 Richtig - Benötigte Zeit: 64.9691511071938
    Sudoku Logisch 5 Richtig - Benötigte Zeit: 64.7501288571592
    Sudoku Logisch 6 Richtig - Benötigte Zeit: 130.012613334935
    Sudoku Logisch 7 Richtig - Benötigte Zeit: 128.90465128948
    Sudoku Logisch 8 Falsch
    Sudoku Logisch 9 Richtig - Benötigte Zeit: 161.216579202105
    Sudoku Logisch 10 Richtig - Benötigte Zeit: 129.80336886392

    Ergebnis Logisch: Zeit gesammt: 1135.98124901349 Zeit Durchschnitt: 113.598124901349

    Sudoku Backtrack 1 Falsch
    Sudoku Backtrack 2 Falsch
    Sudoku Backtrack 3 Falsch
    Sudoku Backtrack 4 Falsch
    Sudoku Backtrack 5 Falsch
    Sudoku Backtrack 6 Falsch
    Sudoku Backtrack 7 Falsch
    Sudoku Backtrack 8 Falsch
    Sudoku Backtrack 9 Falsch
    Sudoku Backtrack 10 Falsch

    Ergebnis Logisch: Zeit gesammt: 1135.98124901349 Zeit Durchschnitt: 113.598124901349
    Ergebnis Backtrack: Zeit gesammt: 2610.95502361334 Zeit Durchschnitt: 261.095502361334
    Ergebnis gelöste Sudokus: 9

    Ich hoffe, ich bekomme auch Logisch Nr.8 noch hin, ohne viel an Speed einzubüßen!

    Und bei den anderen muß ich mir sowieso noch was überlegen...

    lgE

  • _ispressed "anykey"

    • eukalyptus
    • 9. April 2009 um 11:01

    Macht nur 1 DllCall, statt 256:

    Press any key (GetKeyboardState)

    lgE

  • Datenaustausch zwischen 2 Scripts

    • eukalyptus
    • 9. April 2009 um 10:57

    Weitere Möglichkeiten:

    1) Via Consolewrite bzw. ConsoleRead (Stdin)

    2) In GUI ein Edit erstellen, welches via ControlSetText gefüttert wird

    3) via PostMessage / _SendCopyDataString

    Zu allen Möglichkeiten gibts schon Beispiele im Forum

    lgE

  • µit - März

    • eukalyptus
    • 8. April 2009 um 19:43

    Zuwenig Vorgaben bei Backtracking geht nicht ;)
    sondern nur falsche Vorgaben...

    Ein Backtrackalgorithmus muß auch ein leeres Sudoku korrekt befüllen können.

    Nr. 4 hat folgende Lösung:

    Code
    947  165  283  
    823  974  516  
    651  328  947  
    
    
    478  596  132  
    516  432  879  
    239  817  465  
    
    
    764  251  398  
    385  749  621  
    192  683  754
    Alles anzeigen

    Ach ja, ich hab einen Intel Core2 T7200 @ 2,00 GHz
    Aber wenn ich noch etwas Zeit finde, dann wird mein Algo noch etwas schneller ;)

    Edit: Lösung oben ist vom 5 Sudoku, hier Lösung 4:

    Code
    953  762  841  
    624  815  973  
    871  349  652  
    
    
    289  457  136  
    165  283  497  
    437  691  285  
    
    
    796  524  318  
    318  976  524  
    542  138  769
    Alles anzeigen
  • ControlID durch Handle+Position herrausfinden

    • eukalyptus
    • 8. April 2009 um 13:10

    Falls du erkennen kannst, daß ein ControlClick nicht funktionieren wird, dann kannst du in diesem Fall ein MouseClick machen.
    Und zwar zuerst Mausposition speichern und nach dem Click wieder zurücksetzten (mit Speed 0).

    Das behindert zwar die richtige Maus für ein paar wenige ms, aber es würde funktionieren...

  • Problem mit GDI+

    • eukalyptus
    • 8. April 2009 um 13:05

    Hi

    Beim Überfliegen fallen mir folgende Sachen auf:

    1) In Zeile 11 wird ein Bild geladen
    Wenn es sich nicht um ein gif oder bmp handelt, dann wird es in Zeile 18 erneut geladen und ist somit 2x im Speicher

    2) Ich würde den Ordner "klein" nicht in der Funktion erstellen, sondern nur einmal am Anfang; die Funktion wird doch 8000 mal ausgeführt!

    3) Ich verstehe ab Zeile 12 nicht so ganz:
    Wenn gif oder bmp, dann speicherst du mal in Jpg, lädst diese und speicherst am Schluß wieder in gif/bmp? ($NewFile bleibt doch gleich...)

    Warum das Script jedoch nur bis 6000 geht, weiß ich jetzt auch nicht?!?
    Gib mal nach jedem _GDIPlus_ImageSaveToFile ein Consolewrite incl. @error, und zwar so, daß du erkennst um welches _GDIPlus_ImageSaveToFile es sich handelt...
    ConsoleWrite(@error & " " & $Newfile & " 1" & @lf)
    ConsoleWrite(@error & " " & $Newfile & " 2" & @lf)

    Vielleicht auch mit Counter...
    Dann siehst du zumindest mal, ob die Funktion auch tatsächlich 8000 mal ausgeführt wird, oder z.b. nur nicht richtig gespeichert...

    lgE

  • Botproblem verringern - Idee

    • eukalyptus
    • 8. April 2009 um 11:48

    Jeder hier im Forum halbwegs aktive kann einen bot schreiben.

    Es geht darum, daß wir die Leute loswerden wollen, die ganz schnell einen bot wollen und sich nur deshalb hier anmelden.
    Wer sich hier anmeldet, an Autoit Interesse zeigt und konstruktiv mitarbeitet, wird dadurch in kurzer Zeit genug lernen um sich einen bot zu schreiben.
    Aber dann hat er es sich auch verdient.

  • Botproblem verringern - Idee

    • eukalyptus
    • 8. April 2009 um 03:18

    Hi

    ich halte folgendes für sinnvoll:

    1) Bot Threads unsichtbar für User mit weniger als 10 selbst erstellten Threads
    2) Bei seinen 10 ersten erstellten Threads bekommt ein neuer User besagte Sicherheitsabfrage
    3) zusätzlich könnte man noch den vorgeschlagenen checker (pixelsearch usw...) einbauen, welcher nochmals auf die Forenregeln hinweist (auch nur bis zum 10ten)

    glaube aber, daß es sogar reichen würde die Grenze auf 5 senken, zumindest bei Punkt 2 und 3.

    lgE

  • ControlID durch Handle+Position herrausfinden

    • eukalyptus
    • 8. April 2009 um 02:58

    Hi

    Wenn die Position über einem Control ist, dann bekommt man mit WindowFromPoint Handle vom Control, ansonsten vom Window.
    darum sollte es eigentlich funktionieren:
    (zumindest ist das Ergebnis identisch mit AutoitInfo)

    [autoit]

    $tPoint=DllStructCreate($tagPOINT)
    DllStructSetData($tPOINT , "X", $iX)
    DllStructSetData($tPOINT , "Y", $iY)
    $hWnd=_WinAPI_WindowFromPoint($tPOINT)
    ControlClick(WinGetHandle(""),"",$hWnd)

    [/autoit]

    Aber warum benuzt du nicht einfach

    [autoit]

    MouseClick

    [/autoit]

    ?
    Oda hab ich was nicht verstanden ;)

  • Text sichtbar GUI unsichtbar

    • eukalyptus
    • 7. April 2009 um 19:14

    Such mal im Forum nach SetLayeredWindowAttributes oder so ähnlich ;)

  • wie kann ich gucken wie lange eine taste gedrückt wurde?

    • eukalyptus
    • 7. April 2009 um 13:36

    Hi

    Bei mir gehts nur bis zu 4 Tasten gleichzeitig

    Spoiler anzeigen
    [autoit]


    Global $sLabel=""

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

    Global $aKeyState = _WinAPI_GetKeyboardState()
    Global $aKeyTimer[256][2]
    For $i = 0 To 255
    $aKeyTimer[$i][0] = $aKeyState[$i]
    Next

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

    Global $hGui = GUICreate("TestKeyTimer", 400, 400)
    Global $hLabel = GUICtrlCreateLabel("", 2, 2, 396, 396)
    GUISetState()

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

    While GUIGetMsg() <> -3
    $aKeyState = _WinAPI_GetKeyboardState()
    For $i = 0 To 255
    If $aKeyState[$i] < 0 And $aKeyState[$i] <> $aKeyTimer[$i][0] Then
    $aKeyTimer[$i][0] = $aKeyState[$i]
    $aKeyTimer[$i][1] = TimerInit()
    ElseIf $aKeyState[$i] <> $aKeyTimer[$i][0] Then
    $aKeyTimer[$i][0] = $aKeyState[$i]
    $sLabel&= "Taste Nr.: " & $i & " ( CHR: " & Chr($i) & " ) war " & Round(TimerDiff($aKeyTimer[$i][1]), 2) & " ms lang gedrückt" & @LF
    GUICtrlSetData($hLabel,$sLabel)
    EndIf
    Next
    WEnd

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _WinAPI_GetKeyboardState
    ; Description ...: Returns the status of the 256 virtual keys
    ; Syntax.........: _WinAPI_GetKeyboardState($iFlag=0)
    ; Parameters ....: $iFlag - Return Type
    ; 0Returns an array[256]
    ;1Returns a string
    ; Return values .: Success - Array[256] or String containing status of 256 virtual keys
    ; Failure - False
    ; Author ........: Eukalyptus
    ; Modified.......:
    ; Remarks .......: If the high-order bit is 1, the key is down; otherwise, it is up.
    ;If the key is a toggle key, for example CAPS LOCK, then the low-order bit is 1
    ;when the key is toggled and is 0 if the key is untoggled
    ; Related .......: _IsPressed
    ; Link ..........;
    ; Example .......;
    ; ===============================================================================================================================
    Func _WinAPI_GetKeyboardState($iFlag = 0)
    Local $aDllRet, $lpKeyState = DllStructCreate("byte[256]")
    $aDllRet = DllCall("User32.dll", "int", "GetKeyboardState", "ptr", DllStructGetPtr($lpKeyState))
    If @error Then Return SetError(@error, 0, 0)
    If $aDllRet[0] = 0 Then
    Return SetError(1, 0, 0)
    Else
    Switch $iFlag
    Case 0
    Local $aReturn[256]
    For $i = 1 To 256
    $aReturn[$i - 1] = DllStructGetData($lpKeyState, 1, $i)
    Next
    Return $aReturn
    Case Else
    Return DllStructGetData($lpKeyState, 1)
    EndSwitch
    EndIf
    EndFunc ;==>_WinAPI_GetKeyboardState

    [/autoit]
  • wie kann ich gucken wie lange eine taste gedrückt wurde?

    • eukalyptus
    • 7. April 2009 um 12:55

    Hi

    Bei _IsPressed wird für jede Taste ein DllCall ausgeführt...

    Ressourcenschonender ist diese Lösung:

    Spoiler anzeigen
    [autoit]


    Global $aKeyState = _WinAPI_GetKeyboardState()
    Global $aKeyTimer[256][2]
    For $i = 0 To 255
    $aKeyTimer[$i][0] = $aKeyState[$i]
    Next

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

    Global $hGui = GUICreate("TestKeyTimer", 400, 50)
    Global $hLabel = GUICtrlCreateLabel("", 2, 2, 396, 46)
    GUISetState()

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

    While GUIGetMsg() <> -3
    $aKeyState = _WinAPI_GetKeyboardState()
    For $i = 0 To 255
    If $aKeyState[$i] < 0 And $aKeyState[$i] <> $aKeyTimer[$i][0] Then
    $aKeyTimer[$i][0] = $aKeyState[$i]
    $aKeyTimer[$i][1] = TimerInit()
    ElseIf $aKeyState[$i] <> $aKeyTimer[$i][0] Then
    $aKeyTimer[$i][0] = $aKeyState[$i]
    GUICtrlSetData($hLabel, "Taste Nr.: " & $i & " ( CHR: " & Chr($i) & " ) war " & Round(TimerDiff($aKeyTimer[$i][1]), 2) & " ms lang gedrückt")
    EndIf
    Next
    WEnd

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _WinAPI_GetKeyboardState
    ; Description ...: Returns the status of the 256 virtual keys
    ; Syntax.........: _WinAPI_GetKeyboardState($iFlag=0)
    ; Parameters ....: $iFlag - Return Type
    ; 0Returns an array[256]
    ;1Returns a string
    ; Return values .: Success - Array[256] or String containing status of 256 virtual keys
    ; Failure - False
    ; Author ........: Eukalyptus
    ; Modified.......:
    ; Remarks .......: If the high-order bit is 1, the key is down; otherwise, it is up.
    ;If the key is a toggle key, for example CAPS LOCK, then the low-order bit is 1
    ;when the key is toggled and is 0 if the key is untoggled
    ; Related .......: _IsPressed
    ; Link ..........;
    ; Example .......;
    ; ===============================================================================================================================
    Func _WinAPI_GetKeyboardState($iFlag = 0)
    Local $aDllRet, $lpKeyState = DllStructCreate("byte[256]")
    $aDllRet = DllCall("User32.dll", "int", "GetKeyboardState", "ptr", DllStructGetPtr($lpKeyState))
    If @error Then Return SetError(@error, 0, 0)
    If $aDllRet[0] = 0 Then
    Return SetError(1, 0, 0)
    Else
    Switch $iFlag
    Case 0
    Local $aReturn[256]
    For $i = 1 To 256
    $aReturn[$i - 1] = DllStructGetData($lpKeyState, 1, $i)
    Next
    Return $aReturn
    Case Else
    Return DllStructGetData($lpKeyState, 1)
    EndSwitch
    EndIf
    EndFunc ;==>_WinAPI_GetKeyboardState

    [/autoit]

    Allerdings bekommt man damit nur Resultate, wenn man den Fokus im GUI hat!
    (Man kann nicht prüfen, welche Taste z.b. im Notepad gedrückt wurde - und das ist auch gut so ;))

    lgE

  • Rechnen mit Textdateien

    • eukalyptus
    • 7. April 2009 um 11:00

    Schau dir mal in der Hilfe den Befehl Execute an

    ps.: Willkommen im Forum ;)

    lgE

  • Wo ist der Fehler?

    • eukalyptus
    • 7. April 2009 um 09:47

    Du must bei IniWrite das GuiCtrlRead machen:
    IniWrite(@scriptdir & "\settings.ini","settings","plus",GUICtrlRead($che1))

    Und beim Erstellen der Checkbox:
    If IniRead(@scriptdir & "\settings.ini","settings","plus","1")=1 Then GUICtrlSetState($che1, $GUI_CHECKED)

    lge

  • Multidimensionale Arrays anzeigen

    • eukalyptus
    • 7. April 2009 um 00:23

    Ja, diese Funktion hatte ich auch schon im Einsatz!
    Sowie auch deine anderen genialen Array-Sachen, welche mir schon oft das Leben erleichtert haben
    Danke :thumbup:

  • Multidimensionale Arrays anzeigen

    • eukalyptus
    • 7. April 2009 um 00:02

    Ach ja!

    Interessant dürfte noch folgendes sein:
    Mit Eval kann man eine Variable auslesen, welche man mit einem String definiert:

    [autoit]

    Global $Var=1
    MsgBox(0,"",Eval("Var"))

    [/autoit]

    Dies funktioniert allerdings nicht mit Arrays; Da kann man aber Execute verwenden:

    [autoit]

    Global $Var[1]=[1]
    MsgBox(0,"",Execute("$Var[0]"))

    [/autoit]

    kann vielleicht der eine oder andere mal gebrauchen...

    lgE

  • Multidimensionale Arrays anzeigen

    • eukalyptus
    • 6. April 2009 um 23:33

    Also ich benutze häufig _ArrayDisplay zum debuggen.
    Allerdings benutze ich auch oft Arrays mit 3 Dimensionen oder habe manchmal Arrays im Array
    und das schafft _ArrayDisplay nicht mehr...

    Dieses Script hab ich eigentlich nur zum debuggen gemacht.
    Eine andere Verwendungsmöglichkeit hab ich auch noch nicht gefunden ;)

    mehr als 3 Arraydimensionen hab ich auch noch nie benötigt, aber Autoit schafft insgesammt 64 und das sollte auch mein Script schaffen, hab ich aber nicht ausprobiert ;)

    lgE

  • Multidimensionale Arrays anzeigen

    • eukalyptus
    • 6. April 2009 um 15:57

    _ArrayDisplay zeigt nur 2D-Arrays...

    Ich brauchte eine Möglichkeit, Arrays anzuzeigen.
    Und zwar egal, wie viele Dimensionen, oder ob ein Element selber ein Array ist...

    Das geht eigentlich nur mit einem Treeview.
    Und so hab ich mir die Funktion _ArrayDisplayTree geschrieben.

    Ist rekursiv, d.h. es werden alle Elemente angezeigt, auch wenn es sich um ein Array im Array im Array usw. handelt.

    So wird z.b. ein 5D-Array dargestellt (nur first levels ausgeklappt):
    (grün sind die Unterdimensionen, blau die tatsächlichen Elemente - zwischen < und > steht der Wert des Elements)
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Beispiele sind dabei...

    lgE

  • Vista ist Müll

    • eukalyptus
    • 6. April 2009 um 00:47
    Zitat von MatthiasG.

    Ich musste NIE Vista nahc einem Update aktualisieren. NIE! NIE! NIE! :D

    Ich auch nicht - Hab ja nach wie vor XP :D

    Ich bin aber positiv gestimmt auf Windows 7 - Ein verbessertes Vista mit weniger Systemauslastung!

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™