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

Beiträge von name22

  • ShellExecute verständnis frage !

    • name22
    • 3. Dezember 2012 um 23:08
    Zitat

    Wenn aber noch jemand ne Idee hat wie man das mit einer Progressbar hinbekommt wäre das echt Super.


    Das ist nur möglich, wenn du weißt wie viel Zeit der externe Prozess benötigt bzw. dessen Fortschritt kennst. AutoIt kann weder zaubern, noch hellsehen (leider ;)). Wenn du uns konkret sagst um was für eine Aufgabe es sich handelt, die mit ShellExecute ausgeführt werden soll, dann können wir eventuell das ganze doch ermöglichen (falls es möglich ist).

  • Geschwindigkeit

    • name22
    • 2. Dezember 2012 um 21:02

    autoBert Ehrlich gesagt finde ich nicht, dass da eines flexibler ist als das andere..
    So könnte man das ganze noch vereinfachen. Man kann so viele Statusstrings hinzufügen wie man will und muss sie nur durch ein "|" Symbol trennen. ;)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $sStatus = "Plot1|Plot2|default|graphics"
    $sRead = FileRead(@ScriptDir & "\Test.txt")

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

    $t = TimerInit()
    $aRes = StringRegExp($sRead, "(?m)^(" & $sStatus & ")\t(\H+)$", 3)
    $t = TimerDiff($t)

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

    _ArrayDisplay($aRes, "Time: " & Round($t))

    [/autoit]
  • $search = FileFindFirstFile in Ordner und Unterordner anwendbar

    • name22
    • 2. Dezember 2012 um 18:53

    In einer GUI? Ich würde ein InputControl verwenden. Daneben könntest du ja noch einen "Durchsuchen" Button setzen, der einen FileSelectFolder Dialog öffnet um einen Pfad zu wählen.

  • Geschwindigkeit

    • name22
    • 2. Dezember 2012 um 18:21
    Zitat

    Ja, ich bin davon ausgegangen, dass die Datei bereits als Array vorliegt


    Das hört sich zwar im ersten Beitrag nicht so an, aber in so einem Fall wäre StringSplit natürlich schneller. StringRegExp lohnt sich oft erst bei komplexen Aufgaben wo mehr als 2 String* Funktionen nötig sind.

  • Geschwindigkeit

    • name22
    • 2. Dezember 2012 um 18:08
    Zitat von chesstiger

    Wo brauche ich denn bitte hier mehrere StringSplit's?


    Sobald du mehr als eine Zeile hast :P.

    [autoit]

    #include <Array.au3>

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

    $sString = "Plot1" & @TAB & "C:\Testordner\Testdatei.test" & @CRLF & "Plot2" & @TAB & "C:\Testordner\Testdatei.test"
    $aResult = StringSplit($sString,@TAB)
    _ArrayDisplay($aResult)

    [/autoit]
  • Geschwindigkeit

    • name22
    • 2. Dezember 2012 um 17:43

    Ist die Geschwindigkeit hier wirklich so essenziell? Auf meinem PC brauche ich für eine Testdatei mit 10.000 Einträgen gerade mal 16 Millisekunden.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $sRead = FileRead(@ScriptDir & "\Test.txt")

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

    $t = TimerInit()
    $aRes = StringRegExp($sRead, "(?m)^(Plot1|Plot2|default|graphics)\t(\H+)$", 3)
    $t = TimerDiff($t)

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

    _ArrayDisplay($aRes, "Time: " & Round($t))

    [/autoit]

    @chess Erstens brauchst du dann mehr als ein StringSplit, weil du ansonsten immer beide Teile in einem Array Element hast. Zweitens braucht dieses Testscript bei mir 44 Millisekunden, das ist also weder definitiv, noch schneller als Regex.
    Ich würde sagen es macht einfach keinen Unterschied wie chip schon sagte (besonders nicht wenn man das zweite Script noch optimiert). Also soll die Anna entscheiden was für ihre Zwecke besser ist. ;)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $sRead = FileRead(@ScriptDir & "\Test.txt")

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

    $t = TimerInit()
    $aRes = StringSplit($sRead, @CRLF, 1)
    ;~ _ArrayDisplay($aRes)
    Dim $aNew[$aRes[0] + 1][2] = [[$aRes[0]]]
    For $i = 1 To $aRes[0] - 1
    $aTmp = StringSplit($aRes[$i], @TAB, 2)
    $aNew[$i][0] = $aTmp[0]
    $aNew[$i][1] = $aTmp[1]
    Next
    $t = TimerDiff($t)

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

    _ArrayDisplay($aNew, "Time: " & Round($t))

    [/autoit]
  • $search = FileFindFirstFile in Ordner und Unterordner anwendbar

    • name22
    • 2. Dezember 2012 um 17:06

    Hab dir mal was gebastelt ;). Das hier ist zwar nicht die schnellste Rrekursive Suchfunktion, aber sie ist recht simpel gehalten und ähnelt deiner Version am ehesten:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $aTest = _FileFindRecursive(@UserProfileDir, "*.*", 5)
    _ArrayDisplay($aTest)

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

    Func _FileFindRecursive($sPath, $sSearch, $iDepth = 0)
    ; -Author: name22 (http://www.autoit.de)
    Local Static $iLevel = 0
    $iLevel += 1
    If $iLevel > $iDepth And $iDepth > 0 Then Return
    If StringRight($sPath, 1) <> "\" Then $sPath &= "\"
    Local $hSearch_Recursive = FileFindFirstFile($sPath & $sSearch), $sFile, $aSearchResult[1] = [0], $aTmp

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

    While True
    $sFile = FileFindNextFile($hSearch_Recursive)
    If @error Then ExitLoop
    Switch @extended
    Case 0
    $aSearchResult[0] += 1
    ReDim $aSearchResult[$aSearchResult[0] + 1]
    $aSearchResult[$aSearchResult[0]] = $sPath & $sFile
    Case 1
    $aTmp = _FileFindRecursive($sPath & $sFile, $sSearch, $iDepth)
    If UBound($aTmp) > 1 Then
    $iLastSize = $aSearchResult[0]
    $aSearchResult[0] += $aTmp[0]
    ReDim $aSearchResult[$aSearchResult[0] + 1]
    For $i = 1 To $aTmp[0]
    $aSearchResult[$iLastSize + $i] = $aTmp[$i]
    Next
    $aTmp = 0
    EndIf
    EndSwitch
    WEnd

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

    If $iLevel = 1 Then $iLevel = 0

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

    Return $aSearchResult
    EndFunc

    [/autoit]


    $iDepth steht für die Rekursionstiefe, also die Anzahl der Ebenen von Unterordnern die durchsucht werden ($iDepth = 1 durchsucht nur das angegebene Verzeichnis und ignoriert Unterordner).
    Du kannst ja mal versuchen, dass hier zu verstehen, und dann die schnelleren Funktionen von BugFix, AspirinJunkie, m-obi etc. benutzen.

  • $search = FileFindFirstFile in Ordner und Unterordner anwendbar

    • name22
    • 2. Dezember 2012 um 16:15

    Natürlich geht das.

    [autoit]

    FileFindFirstFile("C:\Users\name22\Desktop\*.txt")

    [/autoit]


    Damit kannst du im Verzeichnis "C:\Users\name22\Desktop\" nach allen Dateien mit der .txt Endung suchen ;). Aber ich bin mir nicht sicher, ob dass das ist was du wolltest.

  • Allert Msgbox schließen?

    • name22
    • 1. Dezember 2012 um 18:05

    Der Hilfe & Unterstützung Bereich ist eigentlich für AutoIt Scripte reserviert ;).

  • Umbau eines Skriptes

    • name22
    • 1. Dezember 2012 um 13:30

    So langsam komm ich mir ein wenig veralbert vor... Du hast bis jetzt wie viele Threads zum selben Thema? 3, 4?
    In keinem deiner Threads bist du auf Fragen bezüglich deines Projekts eingegangen, nachdem klar war, dass es möglicherweise mit den AGB des Anbieters Probleme geben könte auf den du diesen Updater umschreiben wolltest. Muss ich hier jetzt nochmal die selbe Frage stellen, oder geht es dieses Mal tatsächlich um etwas anderes?

  • GDI+ Spielerei - Feuerwerk

    • name22
    • 30. November 2012 um 21:07

    Hübsche Effekte :thumbup: ! Wie immer bei deinen GDI+ Kreationen :D.
    Und es läuft auch bei mir sehr flüssig (kein Wunder auf einem 4 GHz Core :P).

    Zitat

    EIne Frage: Gibts irgendwo ein WinAPI Tutorial für AutoIt?


    Ich bezweifle, dass es ein Tutorial gibt, dass die gesamte Windows API umfasst. Das ist nämlich verdammt viel Zeug :D. Ich lasse meine Meinung aber natürlich gerne widerlegen. Ich glaube ihr sucht eher ein GDI32 und ein GDIPlus Tutorial, diese beiden Dlls werden nämlich hauptsächlich in seinem Script verwendet (GDI+ mehr als das ursprüngliche GDI).

  • multipoint [gdiplus]

    • name22
    • 29. November 2012 um 17:36

    Ich benutze Windows 7 x64.

  • BugFix hat Geburtstag.

    • name22
    • 29. November 2012 um 17:35
    Zitat

    Groß Feiern war nicht - aber ein Glas Cola habe ich mir schon gegönnt nebst einem Teller Tagliatelle Sicilia :rofl:


    Ach, das ist doch schon mal was :D.

  • Brownian Tree

    • name22
    • 28. November 2012 um 20:19

    Geile Sache Andy :thumbup: !

  • BugFix hat Geburtstag.

    • name22
    • 28. November 2012 um 19:39

    Alles Gute BugFix :thumbup: ! Du warst ja praktisch von Anfang an im Forum mit dabei und ich hoffe du bleibst es mindestens noch mal so lange ;).

  • Der_Doc hat Geburtstag.

    • name22
    • 28. November 2012 um 19:37

    Alles Gute zum Geburtstag Doc :party: . Hab nen schönen Tag und lass dich feiern. ;)

  • multipoint [gdiplus]

    • name22
    • 28. November 2012 um 18:08
    Zitat

    das die animation so unflüssig ist liegt nicht an der GUImessage schleife, sondern daran das sich die felder immer ruckartig um 25px verschieben
    oder ruckelt bei dir auch das bitmap das gezeichnet wird? wieviel fps hast du?


    Das meinte ich nicht. Aber die FPS sinken bei mir von 120 auf 56 wenn ich die Maus aus der GUI bewege ;).

  • Brownian Tree

    • name22
    • 28. November 2012 um 18:02

    Schickes Script Andy :D. Das ist doch wesentlich schneller als die bisherigen Versionen.
    Ich hatte die Idee, dass man doch den Abstand den die Partikel zum Seed haben begrenzen könnte. Man müsste genügend Platz lassen, um das Ergebnis möglichst wenig zu beeinträchtigen und den Maximalabstand mit jedem neuen Pixel, der weiter entfernt gesetzt wird als alle Bisherigen, vergößern. Aber ich weiß nicht ob sich das im Code effizient umsetzen lässt.

  • multipoint [gdiplus]

    • name22
    • 28. November 2012 um 17:39

    Wenn du eine flüssige Animation willst, musst du den Zeichenvorgang aus der GUIMessage Schleife nehmen. GUIGetMsg wartet eine gewisse Zeit wenn der Mauszeiger nicht über der GUI ist und verzögert so die Animation wenn die Maus sich außerhalb der GUI befindet.
    Es gibt schon seit einiger Zeit ein paar kleine Tricks wie man eine Animation / ein Spiel mit GDI+ möglichst gut umsetzt. Wenn du willst, kannst du ja mal das Forum nach ein paar fertigen Spielen durchstöbern (oder in meine Signatur schauen).
    Ganz perfekt kriegt man das aber trotzdem nicht hin, da sind GDI+ nun mal gewisse Limits gesetzt.
    Dein Spiel gefällt mir, nur das Script finde ich stellenweise etwas unübersichtlich ;).

  • Brownian Tree

    • name22
    • 26. November 2012 um 18:47

    Vorab: Ziemlich cool :thumbup: .
    Allerdings bin ich mir nicht sicher ob das wirklich das selbe Prinzip ist, wie es auf Rosettacode beschrieben wird... Entweder habe ich es falsch verstanden, oder du :D.

    Das wäre meine Interpretation. Viel schneller lässt sich dieser Algorithmus mit AutoIt nicht umsetzen (es sei denn man schummelt). Aber am Algorithmus den ich verwende lässt sich sicherlich noch feilen ^^.

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>

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

    ; -Author: name22 (http://www.autoit.de)

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

    Global $hDll_GDI32 = DllOpen("gdi32.dll")
    Global $iX_Pos, $iY_Pos, $iX_Dir, $iY_Dir

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

    Global $sFile = FileSaveDialog("Save Picture", "", "Bitmap (*.bmp)")
    If @error Then Exit

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

    Global $iCount = 10000
    Global $iSize = 200

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

    Global $iColorBGR_Seed = 0x0000FF
    Global $iColorBGR_Not = 0x000000
    Global $iColorBGR_Set = 0xFF0000
    Global $iColorBGR_Mov = 0x202020

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

    Opt("GUIOnEventMode", 1)

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

    $hWnd = GUICreate("Brownian Tree", $iSize, $iSize)
    GUISetState()

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

    $hDC_Window = _WinAPI_GetDC($hWnd)
    $hDC_Bitmap = _WinAPI_CreateCompatibleDC($hDC_Window)
    $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC_Window, $iSize, $iSize)
    $hObj_Old = _WinAPI_SelectObject($hDC_Bitmap, $hBitmap)

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

    OnAutoItExitRegister("_Shutdown")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")
    GUISetOnEvent($GUI_EVENT_RESTORE, "_DrawBuffer")
    GUIRegisterMsg($WM_PAINT, "_DrawBuffer")

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

    _WinAPI_SetBkColor($hDC_Bitmap, $iColorBGR_Not)
    _SetPixel($hDC_Bitmap, Random(0, $iSize - 1, 1), Random(0, $iSize - 1, 1), $iColorBGR_Seed)
    _DrawBuffer()

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

    For $i = 1 To $iCount
    Do
    $iX_Pos = Random(0, $iSize - 1, 1)
    $iY_Pos = Random(0, $iSize - 1, 1)
    Until _GetPixel($hDC_Bitmap, $iX_Pos, $iY_Pos) = $iColorBGR_Not

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

    While True
    _SetPixel($hDC_Window, $iX_Pos, $iY_Pos, $iColorBGR_Mov)

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

    $iX_Dir = Random(-1, 1, 1)
    $iY_Dir = Random(-1, 1, 1)
    If $iX_Dir = 0 And $iY_Dir = 0 Then ContinueLoop

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

    If $iX_Pos + $iX_Dir < 0 Or $iX_Pos + $iX_Dir >= $iSize Or $iY_Pos + $iY_Dir < 0 Or $iY_Pos + $iY_Dir >= $iSize Then
    _DrawBuffer()
    $i -= 1
    ExitLoop
    Else
    If _GetPixel($hDC_Bitmap, $iX_Pos + $iX_Dir, $iY_Pos + $iY_Dir) <> $iColorBGR_Not Then
    _SetPixel($hDC_Bitmap, $iX_Pos, $iY_Pos, $iColorBGR_Set)
    _DrawBuffer()
    ExitLoop
    Else
    $iX_Pos += $iX_Dir
    $iY_Pos += $iY_Dir
    EndIf
    EndIf
    WEnd
    Next

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

    _GDIPlus_Startup()
    $hBitmapTmp = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    If Not StringRegExp($sFile, "\.bmp\z") Then $sFile &= ".bmp"
    _GDIPlus_ImageSaveToFile($hBitmapTmp, $sFile)
    _GDIPlus_ImageDispose($hBitmapTmp)
    _GDIPlus_Shutdown()

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

    While Sleep(1000)
    WEnd

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

    Func _SetPixel($hDC, $iX, $iY, $iColor)
    DllCall($hDll_GDI32, 'INT', 'SetPixelV', 'HWND', $hDC, 'INT', $iX, 'INT', $iY, 'DWORD', $iColor)
    EndFunc

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

    Func _GetPixel($hDC, $iX, $iY)
    $aRet = DllCall($hDll_GDI32, 'DWORD', 'GetPixel', 'HWND', $hDC, 'INT', $iX, 'INT', $iY)
    Return $aRet[0]
    EndFunc

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

    Func _DrawBuffer()
    DllCall($hDll_GDI32, "BOOL", "BitBlt", "HANDLE", $hDC_Window, "INT", 0, "INT", 0, "INT", $iSize, "INT", $iSize, "HANDLE", $hDC_Bitmap, "INT", 0, "INT", 0, "DWORD", $SRCCOPY)
    EndFunc

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

    Func _Shutdown()
    _WinAPI_SelectObject($hDC_Bitmap, $hObj_Old)
    _WinAPI_ReleaseDC($hWnd, $hDC_Window)
    _WinAPI_DeleteDC($hDC_Bitmap)
    _WinAPI_DeleteObject($hBitmap)

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

    DllClose($hDll_GDI32)
    EndFunc

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

    Func _Close()
    Exit
    EndFunc

    [/autoit]


    Diese Variante braucht allerdings am Anfang so ewig um überhaupt mal zu treffen, dass ich den Weg den die Pixel zurücklegen auch temporär einfärben lasse um mich zu versichern, dass überhaupt etwas passiert :D.

    Edit: Hab noch 2 Bilder angehängt, eins von meinem Programm [Rechts] und eins von TheLuBus [Links] (musste ich per Screenshot erstellen).
    Edit2: Hab noch eine kleine Farbspielerei angehängt

    Bilder

    • Unbenannt.PNG
      • 10,92 kB
      • 207 × 213
    • Test.png
      • 8,25 kB
      • 200 × 200
    • Gradient.png
      • 22,97 kB
      • 200 × 200

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™