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

Beiträge von UEZ

  • _FileListToRekursiv Update: 08.07.2011

    • UEZ
    • 24. Januar 2010 um 17:24
    Zitat von sc4ry

    Fehler lag an mir.

    Also speedtechnisch:

    1. Lauf 66694ms
    2. Lauf 9904
    3. Lauf 9324

    Also ich muss sagen, beim ersten Lauf ist das Teil wesentlich langsamer als bei der 1. Version ... danach ist der Wert gut

    Das Betriebssystem "cached" Dateien und deshalb ist der 1. Lauf eigentlich der tatsächlich relevante Wert! Nach jedem Durchlauf müsste man den Rechner durchstarten und neu messen, damit die Ergebnisse nicht verfälscht werden!
    Darum werden auch HD Benchmarks auf Hardwareebene programmiert, damit die Ergebnisse durch das Cachen nicht beinflusst werden!

    Gruß,
    UEZ

  • Rekursionseinstieg: Fakultät - Logikproblem!?

    • UEZ
    • 24. Januar 2010 um 17:16

    Ihr habt mich überzeugt, dass die Rekusion von den Fibonacci nicht mit AutoIt, sondern wirklich mit der Rekursionstiefe und somit mit der Anzahl der Berechnungen zu tun hat!

    @AspinirinJunkie: ich habe deine berechtigte Kritik nicht als Angriff angesehen! Ich dachte nur, dass der Unterschied nicht so krass sein würde! Ich habe mir den Rekursionsbaum für n=3 angeschaut, aber daraus lässt sich nicht klar absehen, dass die Berechnungen exponentiell zunehmen!

    Jeder sollte Kritik nicht als Angriff ansehen, sondern eher als eine konstruktive Diskussionsgrundlage!

    DANKE,
    UEZ

  • Rekursionseinstieg: Fakultät - Logikproblem!?

    • UEZ
    • 24. Januar 2010 um 15:40
    Zitat

    Das ist mathematisch begründet und nicht informationstechnisch.


    Da gebe ich dir nur teilweise recht!

    Zitat

    Du hast dir zwar ein schönes Beispiel herausgesucht aber es taugt nicht für einen allgemeingültigen Vergleich zwischen Rekursion und Iteration.


    Hast du ein besseres Beispiel? Wenn ja, dann bin ich sehr gespannt darauf!

    Zitat


    Bei der Fibonacci-Folge baut jede Fibonacci-Zahl auf "niedrigeren" Fibonacci-Zahlen auf.
    Bei der Rekursion werden diese "niedrigeren" Fibonacci-Zahlen für jede Fibonacci-Zahl neu berechnet und damit mehrmals berechnet.
    Bei deiner iterativen Variante werden die letzen Fibonacci-Zahlen gepspeichert und für die Berechnung folgender Fibonacci-Zahlen mehrmals verwendet - eine Fibonacci-Zahl wird also nur einmal berechnet - im Gegensatz zur Rekursion.


    Und deswegen liegt die Laufzeit so weit auseinander? Eine Verdoppelung würde ich ja noch akzeptieren.

    Zitat

    Da ist der exponentielle Anstieg im Vergleich zu dieser iterativen Methode nur logisch - aber er ist rein mathematisch begründet - auch in reinem Assembler gegossen würdest du diesen Anstieg feststellen.


    Das es einen Unterschied zwischen Rekursion und Interation gibt, da Rekusion mehr Berechnungen hat, ist mit schon klar, aber das der Unterschied so gewaltig ist, ist mir ein Rätsel. Liegt sehr wahrscheinlich an AutoIt und dessen internen Strukturen.

    Ich werde demnächst mal das Beispiel in C++ coden und messen, ob dort der Unterschied so groß ist.

    Gruß,
    UEZ

  • GDIPlus

    • UEZ
    • 24. Januar 2010 um 11:58

    Vielleicht so was:

    Spoiler anzeigen
    [autoit]


    #AutoIt3Wrapper_UseUpx=n
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt('MustDeclareVars', 1)

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

    Local $iX = 320
    Local $iY = 320
    Local $hWnd = GUICreate("GDI+ Test", $iX, $iY)
    GUISetState()
    GUISetOnEvent(-3, "_Close")

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

    _GDIPlus_Startup()
    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iX, $iY, $hGraphics)
    Local $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Local $pen_size = 128
    Local $hPen = _GDIPlus_PenCreate(0xFF00FF00, $pen_size)
    Local $sleep = 20
    _GDIPlus_GraphicsSetSmoothingMode($hBackbuffer, 2)

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

    GUIRegisterMsg($WM_TIMER, "Draw") ;$WM_TIMER = 0x0113
    DllCall("User32.dll", "int", "SetTimer", "hwnd", $hwnd, "int", 0, "int", $sleep, "int", 0)

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

    While Sleep(30)

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

    WEnd

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

    Func Draw()
    _GDIPlus_GraphicsClear($hBackbuffer)
    _GDIPlus_GraphicsDrawEllipse($hBackbuffer, $pen_size / 2, $pen_size / 2, $iX - $pen_size, $iY - $pen_size, $hPen)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iX, $iY)
    EndFunc

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

    Func _Close()
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hBackbuffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]

    Gruß,
    UEZ

  • Drag and drop fehler

    • UEZ
    • 24. Januar 2010 um 00:11

    Ersetze die Funktion WM_DROPFILES_FUNC mit dieser:

    Spoiler anzeigen
    [autoit]


    Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam) ; diese Funktion wird benötigt, damit man auch mehrere Dateien droppen kann
    Local $nSize, $pFileName
    Local $nAmt = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', 0xFFFFFFFF, 'ptr', 0, 'int', 255)
    For $i = 0 To $nAmt[0]
    $nSize = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', 0, 'int', 0)
    $nSize = $nSize[0] + 1
    $pFileName = DllStructCreate('wchar[' & $nSize & ']')
    DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', DllStructGetPtr($pFileName), 'int', $nSize)
    $filename = DllStructGetData($pFileName, 1) ;Dateinamen holen
    ConsoleWrite($filename & @CRLF)
    ReDim $gaDropFiles[$i + 1]
    $gaDropFiles[$i] = DllStructGetData($pFileName, 1)
    $pFileName = 0
    Next
    EndFunc ;==>WM_DROPFILES_FUNC

    [/autoit]

    Gruß,
    UEZ

  • GDIPlus

    • UEZ
    • 23. Januar 2010 um 23:16

    Mit GUIRegisterMsg vielleicht?

    Hier ein Beispiel, das ein Farbverlauf erstellt (ist nicht die beste Methode) und das Fenster entsprechend neu zeichnet:

    Spoiler anzeigen
    [autoit]


    ;Coded by UEZ
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

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

    Global Const $width = 640
    Global Const $height = 480
    Global $graphics, $backbuffer, $bitmap, $Pen, $i, $pi_div_180 = 4 * ATan(1) / 180

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

    Global $title = "GDI+ Color Gradient"

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

    Opt("GUIOnEventMode", 1)
    $hwnd = GUICreate($title, $width, $height, -1, -1) ;, BitOR($WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP))
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
    GUISetState()

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

    _GDIPlus_Startup()
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    $pen = _GDIPlus_PenCreate(0xFF000000, 1)

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

    ;you can move this lines below until Do...Until loop to Do...Until loop and make some realtime effects
    $r = 0x00
    $g = 0x00
    $b = 0xFF
    $c = "0xFF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2)
    $i = 255 / $width

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

    _GDIPlus_GraphicsClear($backbuffer)

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

    For $x = 0 To $width
    _GDIPlus_GraphicsDrawLine($backbuffer, $x, 0, $x, $width, $pen)
    _GDIPlus_PenSetColor($pen, $c)
    $r += $i
    $g += $i
    $c = "0xEF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2)
    Next

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

    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)

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

    GUIRegisterMsg(0x0F, "MY_PAINT"); Register PAINT-Event 0x000F = $WM_PAINT (WindowsConstants.au3)
    GUIRegisterMsg(0x85, "MY_PAINT"); $WM_NCPAINT = 0x0085 (WindowsConstants.au3)Restore after Minimize.

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

    $b = 0

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

    Do

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

    Until False * Not Sleep(30)

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

    ;Func to redraw on PAINT MSG
    Func MY_PAINT($hWnd, $msg, $wParam, $lParam)
    ; The sequencial order of these two commands is important.
    _GDIPlus_GraphicsDrawImage($graphics, $bitmap, 0, 0)
    _WinAPI_RedrawWindow($hwnd, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW, $RDW_FRAME)); , $RDW_ALLCHILDREN
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_PAINT

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

    Func Close()
    _GDIPlus_PenDispose($pen)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_Shutdown()
    WinClose($hwnd)
    Exit
    EndFunc

    [/autoit]

    Die Funktion MY_PAINT() zeichnet das Fenster neu!


    Meinst du das?

    Gruß,
    UEZ

  • SIDPlay DLL

    • UEZ
    • 23. Januar 2010 um 21:34

    Ich habe noch 3 weitere C++ Source Codes in meinem 1. Post hinzugefügt. Wenn die C++ Gurus mal reinschauen könnten!

    Leider finde ich zu libsidplay2.dll keine Anleitung, wie ich diese DLL benutzen kann!

    Danke,
    UEZ

  • Starthilfe zu GDI+ und Programmidee :)

    • UEZ
    • 23. Januar 2010 um 12:01
    Zitat von PokerFace

    Oh mein Gott.
    Bei UEZ Skript sieht das richtig schön schwer aus^^
    Hinter die Logik steig ich komischerweise nicht.
    Wie sagt man denn zum Beispiel seiner Figur, das die sich nach oben bewegen soll? :D

    Ich würde mir Mario von eukalyptus anschauen! Dort sind die Jump 'n' Run Elemente implementiert, genau wie du willst ;)

    AUTOITEROIDS ist im Prinzip nicht sehr GDI+ lastig, denn es werden ja "nur" Striche gezogen! Schwerer war da das gesamte Handling des Spiels, wie Kollision (simple Version), Berechnungen, etc.

    Ansonsten würde ich mir die GDI+ Beispiele in den Foren anschauen und lernen, denn er gibt kein Tutorial dazu!

    Gruß,
    UEZ

  • Mehrere 'Case' möglichkeiten GLEICHZEITIG

    • UEZ
    • 22. Januar 2010 um 22:26

    Hier mein Vorschlag:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form = GUICreate("Beispiel von UEZ", 316, 46)
    $Button1 = GUICtrlCreateButton("Start", 8, 8, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Stop", 232, 8, 75, 25, $WS_GROUP)
    $Input = GUICtrlCreateInput("0", 96, 8, 121, 21, $ES_READONLY)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    GUICtrlSetState($Button2, $GUI_DISABLE)
    $z = 0

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

    While 1 * Sleep(20)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    AdlibUnRegister("Start")
    Exit
    Case $Button1
    GUICtrlSetState($Button1, $GUI_DISABLE)
    GUICtrlSetState($Button2, $GUI_ENABLE)
    $start = True
    AdlibRegister("Start", 100)
    Case $Button2
    GUICtrlSetState($Button1, $GUI_ENABLE)
    Stop()
    GUICtrlSetState($Button2, $GUI_DISABLE)
    EndSwitch
    WEnd

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

    Func Start()
    $z += 1
    GUICtrlSetData($Input, $z)
    Return
    EndFunc

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

    Func Stop()
    AdlibUnRegister("Start")
    Return
    EndFunc

    [/autoit]

    Gruß,
    UEZ

  • Autoit rechnet falsch?

    • UEZ
    • 22. Januar 2010 um 10:34
    [autoit]


    #include <BigNum.au3>

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

    $m = 72
    $c = _BigNum_Pow($m, 7)
    $c = _BigNum_Mod($c, 187)

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

    MsgBox(0,"",$c)

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

    $m = _BigNum_Pow($c, 23)
    $m = _BigNum_Mod($m, 187)

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

    MsgBox(0, "" ,$m)

    [/autoit]

    Gruß,
    UEZ

    Dateien

    BigNum.au3 35,39 kB – 239 Downloads
  • Autoit rechnet falsch?

    • UEZ
    • 22. Januar 2010 um 09:04
    Zitat von chip

    Hi,

    kann es sein das Autoit falsch Rechnet bzw. irgendwie rundet?

    Habe folgendes Script:

    Spoiler anzeigen
    [autoit]

    $m = 72
    $c = $m^7
    $c = Mod($c,187)

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

    MsgBox(0,"",$c)

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

    $m = $c^23
    $m = Mod($m,187)

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

    MsgBox(0,"",$m)

    [/autoit]


    Bis zur Zeile "$m = Mod($m,187)" stimmt noch alles, aber hier gibt es statt 72 den Wert 34 aus.

    Alles anzeigen

    AutoIt kann 30^23=9,4143178827e+33 (0xB708F35A37800000) intern (64-bit signed) nicht mehr richtig darstellen.

    63 bits werden für die positiven Zahlen (0x7FFFFFFFFFFFFFFF) benötigt und das 64. bit für die negativen Zahlen!

    Mod(9223372036854775807, 187) sollte noch gehen und Mod(9223372036854775808, 187) nicht mehr!

    UEZ

  • Screenshot von einem bestimmten Fenster

    • UEZ
    • 21. Januar 2010 um 15:46

    Hier, was mir so ad hoc eingefallen ist:

    [autoit]


    ;coded by UEZ
    #include <ScreenCapture.au3>

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

    $title = "Unbenannt - Editor" ;Beispiel mit Notepad
    $list = WinList() ;liste alle Fenster
    If $list[0][0] > 0 Then ;wenn Liste nicht leer, dann weiter
    $i = 1
    Do
    If StringInStr($list[$i][0], $title) > 0 Then ;finde erstes Notepad Fenster
    $hWnd = $list[$i][1] ;merke Handel vom Fenster
    WinSetState($hWnd, "", @SW_RESTORE) ;stelle wieder das Notepad Fenster her, da minimiert der Screenshot sonst schwarz wäre
    Sleep(250) ;warte auf das Notepad Fenster
    _ScreenCapture_CaptureWnd(@ScriptDir & "\notepad.jpg", $hWnd) ;mache ein Foto und speichere das Bild ab
    WinSetState($hWnd, "", @SW_MINIMIZE) ;minimiere das Fenster wieder
    ExitLoop ;verlasse Schleife
    EndIf
    $i += 1
    Until $i >= $list[0][0] ;suche solange bis alle Fenster durchsucht sind!
    EndIf
    Exit

    [/autoit]

    Vorher Notepad starten und minimieren (Simulation).

    Gruß,
    UEZ

  • Einer Konsolenanwendung eine Taste schicken

    • UEZ
    • 21. Januar 2010 um 12:00

    Klappt das denn:

    [autoit]


    $exe = "test15.exe"
    $pid = ProcessExists("test15.exe")
    If $pid Then
    $wl = WinList()
    $handle = 0
    $i = 0
    Do
    If StringInStr($wl[$i][0], $exe) > 0 Then
    $handle = $wl[$i][1]
    WinActivate($handle)
    WinWaitActive($handle)
    Sleep(100)
    StdinWrite($pid, "{ESC}")
    ExitLoop
    EndIf
    $i += 1
    Until $i = $wl[0][0]
    EndIf
    Exit

    [/autoit]

    Wobei du für test15.exe deine Anwendung eintragen musst!

    Gruß,
    UEZ

  • Webcam Spionage???

    • UEZ
    • 20. Januar 2010 um 22:15

    Sorry, meine du musst die Prozesse nach der Webcam exe durchsuchen (Doppeltklick auf die einzelnen Prozesse)!

    UEZ

  • Webcam Spionage???

    • UEZ
    • 20. Januar 2010 um 22:03

    Ein Doppeltklick auf Webcam.exe in procexp.exe sollte mehr Infos liefern!

    UEZ

  • Webcam Spionage???

    • UEZ
    • 20. Januar 2010 um 21:49

    Probiere mal die Tools aus der Sysinternals Suite , z.B. Tcpview.exe, procexp.exe, autoruns.exe, etc.

    Die geben wesentlich mehr Infos als die Boardtools von MS!

    Gruß,
    UEZ

  • Hilfe "Open this Script" funkt. nicht mehr

    • UEZ
    • 20. Januar 2010 um 21:14

    Scheint an der AutoIt3Help.exe zu liegen!

    Wenn man die ältere Version, z.B. aus AutoIt v3.3.2.0 benutzt, funktioniert der Button wieder wie gehabt!

    Im Anhang die ältere Version!

    Gruß,
    UEZ

    PS: wird auch als Child Process gestartet (macht ja Sinn) ;)
    PSS: schein ein Bug zu sein und es wird ein Bug Report erstellt!

    Gruß,
    UEZ

    Dateien

    AutoIt3Help.zip 22,3 kB – 490 Downloads
  • Hilfe "Open this Script" funkt. nicht mehr

    • UEZ
    • 20. Januar 2010 um 19:19

    Mmhh, das Problem habe ich auch auf meinem priv. Notebook unter Vista x32!

    AutoIt3Help.exe wird von SciTE.exe als Child Process geöffnet und "Open this script" funktioniert nicht. Wenn aber AutoIt3Help.exe vor SciTE.exe geöffnet wird, geht's (AutoIt3Help.exe ist kein Child Process von SciTE.exe)!

    Muss jetzt zum Elternabend!


    UEZ

  • id3 tags auslesen

    • UEZ
    • 19. Januar 2010 um 20:21

    Du kannst z.B. mit Bass.dll respektive Bass.au3 ID3 Tags auslesen. Schaue mal hier rein: http://www.autoitscript.com/forum/index.php?showtopic=83481&view=findpost&p=756437

    Gruß,
    UEZ

  • Rekursionseinstieg: Fakultät - Logikproblem!?

    • UEZ
    • 19. Januar 2010 um 20:05
    Zitat von peethebee

    Grundsätzlich mal ja.
    Funktionsaufrufe sind teuer, weil man Variablen sichern muss beim Aufruf und bei der Rückkehr. Außerdem muss man die Funktion in der Funktionstabelle nachschlagen und dahin springen. Das ist natürlich relativ umso teurer, je weniger Code pro Iteration/Funktionsaufruf abgearbeitet wird :).
    Die Stärke des Effekts kann natürlich variieren.
    Zudem kann mancher Compiler (einfache) Rekursionen in Iterationen umbauen.

    Johannes

    Da stimme ich dir vollkommen zu, aber ist der Unterschied so krass wie in AutoIt? In meinem Beispiel wächst der Unterschied exponential mit n!

    Gruß,
    UEZ

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™