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

Beiträge von diepfeile

  • Local, Const oder Static?

    • diepfeile
    • 22. Oktober 2018 um 23:57

    Damit hab ich es getestet:
    Local $hVarTimer = TimerInit()
    Local Static $iShortLoop = 3000 / $iShortSleep
    Local Static $iLongLoop = 120000 / $iShortSleep
    Local $fDiffVar = TimerDiff($hVarTimer)

    Static: 9757 Werte mean: 0,00764635308348 median: 0,006023459567979
    Const: 6764 Werte mean: 0,007079269319721 median: 0,005722219377844

    Komischerweise ist da Const eh schneller.

  • Local, Const oder Static?

    • diepfeile
    • 19. Oktober 2018 um 17:06

    Danke für die Tipps. Da $iShortSleep angepasst werden kann (~50-500ms), möchte ich trotzdem, dass die Fehlermeldungen erst nach einer bestimmten Zeit triggern. So sieht die ganze Funktion aus:

    Zitat

    Func SleepUntilButtonExists($mMap, $bScroll = False)
    Local $hVarTimer = TimerInit()
    Local Static $iShortLoop = 3000 / $iShortSleep
    Local Static $iLongLoop = 120000 / $iShortSleep
    Local $fDiffVar = TimerDiff($hVarTimer)
    ;CW('$fDiffVar: ' & $fDiffVar)
    IniWrite($sINI, 'SUBE Static', TimeStampMilliSeconds(), $fDiffVar)

    Local $iLooped = 0
    Do
    $iLooped += 1
    ;If $bScroll = True And $iLooped > 1 Then MouseWheel('down', 1)
    If $bScroll And $iLooped > 3 And Mod($iLooped,2) = 0 Then MouseWheel('down', 1)
    If $iLooped > $iShortLoop Then CW($mMap.Name & ' $iLooped: ' & $iLooped)
    If $iLooped > $iLongLoop Then
    Send('{PRINTSCREEN}') ; Screenshot the Problem
    KillFlash()
    $iLooped = 0
    MsgBox(0, 'SleepUntilButtonExists $iLooped > 120s: Terminated!', TimeStamp() & ' Screenshot taken' & @CRLF & ' PCS is: ' & my_PCS($mMap) & @CRLF & MapDisplay($mMap))
    WinWaitActive($sBrowserTitle)
    EndIf
    Sleep($iShortSleep)
    Until ButtonExists($mMap)
    EndFunc ;==>SleepUntilButtonExists

    Alles anzeigen

    Es als Code posten funktioniert nicht: https://www.bilder-upload.eu/bild-7433e7-1539961488.png.html

    Ja, der Performancegewinn ist < ms, aber warum sollte ich ihn nicht mitnehmen, zudem summiert sich das ja auf? Dank Local sollte es ja nicht zu Kollisionen kommen können. Oder gehört das einfach zu good coding practices?
    Not = ist auch aus irgendeinem Grund doppelt so schnell wie <>
    Und bei rekursiv mit Funktionen vs interativ mit Array, merkt man schon deutlich was. Bei meinem Problem, die neuste Datei in einem Ordner finden waren das 10% weniger Zeit vs nur 10% RAM nutzen und das waren nur meine beiden besten Lösungen!

  • Local, Const oder Static?

    • diepfeile
    • 18. Oktober 2018 um 16:13

    Ich möchte am Anfang einer Funktion 2 Varibalen definieren, für den späteren Gebrauch:

    $iShortLoop = 3000 / $iShortSleep

    $iLongLoop = 120000/$iShortSleep

    Meine erste Idee war einfach Global Const, aber Global sollte man ja vermeinen und sie werden auch nur in der einen Funktion genutzt.

    Nur ist jetzt die Frage, ob ich Local, Const oder Static nutzen sollte.

    Local brauch ich wohl nicht, da alle Variablen automatisch in Funktionen Local sind?

    Aus anderen Scripts weiß ich, dass Static ein Perfomancegewinn bringt, da die Varibale nur einmal initialisiert wird.

    Aber die Variablen werden sich nicht ändern, wodurch auch Const Sinn machen würde.

    Welche Keywords macehn da Sinn zu verwenden?

  • $hTimer in ini Speichern

    • diepfeile
    • 10. Oktober 2018 um 15:01

    Hmpf, schade. Ich hatte gehofft die Timestamp-vergleiche zu vermeiden und das einfach mit Timern zu lösen, da der Handle davon ja eh aussieht wie ein Timestamp. Naja danke für die Info.

  • $hTimer in ini Speichern

    • diepfeile
    • 10. Oktober 2018 um 02:54

    Ich möchte erreichen dass mein Script alle paar stunden was tun kann. Nur kann es sein, da es mehrere Stunden sind, dass das Script in der Zeit aus war und neu gestartet wurde. Nur möchte ich das es für den Timer nicht gilt.


    AutoIt
    	Local Static $hTimer = IniRead(@TempDir & '\' & $sINI, 'Values','$hTimer', Default)
            ;...
            If TimerDiff($hTimer) > 6300000 Or $hTimer = 'Default' Then
                $hTimer = TimerInit()
                IniWrite(@TempDir & '\' & $sINI, 'Values', '$hTimer', $hTimer)
                ;sachen machen....  
  • $hTimer in ini Speichern

    • diepfeile
    • 9. Oktober 2018 um 18:54

    Eigentlich ist der Code recht gut formatiert, in der Eingabebox auch noch, aber dann komischerweise nicht mehr. Naja nochmal probieren:

    AutoIt
    Local Static $hTimer = Int(IniRead(@TempDir & '\' & $sINI, 'Values', '$hTimer', Default))
    ... 
    $hTimer = TimerInit()
    IniWrite(@TempDir & '\' & $sINI, 'Values', '$hTimer', $hTimer)

    Ich möchte nur, dass der Timer nach einem Neustarts des Skriptes noch funktioniert.

  • $hTimer in ini Speichern

    • diepfeile
    • 9. Oktober 2018 um 15:28

    Ich probiere einen $hTimer in einer ini zu speichern, leider klappt das nicht:

    Code
    		Local Static $hTimer = Int(IniRead(@TempDir & '\' & $sINI, 'Values', '$hTimer', Default))...			$hTimer = TimerInit()			IniWrite(@TempDir & '\' & $sINI, 'Values', '$hTimer', $hTimer)

    Das Probelm ist wohl, dass der Timer ein Handle und kein string oder integer ist? Aber ich weiß nicht wie ich das fixen soll.

  • Shutdown vs Powerdown

    • diepfeile
    • 9. Oktober 2018 um 15:24

    Wo ist denn der Unterschied wenn man Shutdown() nutzt zwischen $SD_SHUTDOWN (1) = Shutdown und $SD_POWERDOWN (8) = Power down und was wenn man beide nutzt?

  • Scripting.Dictionary Problem/Bug

    • diepfeile
    • 5. August 2018 um 12:04

    Zuerst habe ich es auch sauber mit .exists gemacht, musste dann aber leider feststellen, dass es immer True ist.

    Dann kam auch noch raus, es geht auch mit = ““ und das noch schneller...

    Habe nun beide Versionen und gucke mal was besser performt.

    In theoretischen Tests gewinnt .exists ab 10k Ausführungen, vorausgesetzt das Abgefragte existiert nicht.

    Ich komme bei weitem nicht auf so viele Anfragen, zudem kann bei mir die Variable ruhig kreiert werden, da ich kurz darauf in sie schreibe, die Sache ist nur, wenn ich zum ersten mal reinschreibe, muss es anders aussehen, als die weiteren male. Somit ist es recht egal, ob ich es mit .exists oder = ““ löse, oder nicht?

    Zitat

    if daten schon drin Then ; .exists immer true
    (tu nichts außer loggen)
    Else
    ; schreib ich zum erstne mal rein? text entsprechend formatieren
    ; If .exists Then ; leider immer true weil wir ja schon geguckt haben ob daten drin sind, wodurch es ajf existiert
    If Not = "" Then
    var &= ... (befüllen alle weiteren male)
    Else
    var = ... (zum ersten mal befüllen)
    EndIf
    befüllung loggen
    EndIf

    Alles anzeigen
    Zitat

    ; es geht auch mit .exists:
    If .exists Then
    If daten schon drin Then
    (tu nichts außer loggen)
    Else
    var &= ... (befüllen alle weiteren male)
    befüllung loggen
    EndIf
    Else
    var.add ...
    befüllung loggen
    EndIf

    Alles anzeigen

    Zitat, Code alles ist irgendwarum schlecht formatiert.

  • Scripting.Dictionary Problem/Bug

    • diepfeile
    • 4. August 2018 um 15:38

    Hmh, find ich nicht *g, naja danke für die Info.

    Hab nun mal die unterschiedlichen Abfragen auf Geschwindigkeit getestet.

    .exists ist da, obwohl ja nichts kreiert wird, mit Abstand die langsamste:

    Spoiler anzeigen
    Zitat

    $oDict = ObjCreate("Scripting.Dictionary")
    For $i = 0 To 999
    $oDict(Random(100000, 999999, 1)) = Random(100000, 999999, 1)
    Next
    $iInt = 123456
    $diff = 0
    For $j = 0 To 9999
    $timer = TimerInit()
    ;If $oDict.exists($iInt) Then ; 48
    ;If $oDict($iInt) <> '' Then ; 26
    If Not $oDict($iInt) = '' Then ; 24

    $blup = True
    Else
    $blup = False
    EndIf
    $diff += TimerDiff($timer)
    ;ConsoleWrite($diff & ' ' & $blup & @CRLF)
    Next
    $blup = $oDict.exists($iInt)
    ConsoleWrite($diff & ' ' & $blup & @CRLF)

    Alles anzeigen
    Spoiler anzeigen
    Zitat

    $oDict = ObjCreate("Scripting.Dictionary")
    For $i = 0 To 999
    $oDict(Random(100000, 999999, 1)) = Random(100000, 999999, 1)
    Next
    $iInt = 123456
    For $j = 0 To 9
    $timer = TimerInit()
    ;If $oDict.exists($iInt) Then ; 0,0060 0,0057
    ;If $oDict($iInt) <> '' Then ; 0,0039 0,0036
    If Not $oDict($iInt) = '' Then ; 0,0033 0,0030

    $blup = True
    Else
    $blup = False
    EndIf
    $diff += TimerDiff($timer)
    ConsoleWrite($diff & ' ' & $blup & @CRLF)
    Next
    $blup = $oDict.exists($iInt)
    ConsoleWrite(' ' & $blup & @CRLF)

    Alles anzeigen


    Die Zeiten die sich bei mir ergeben, hab ich hinter die If kommentiert. Fast doppelt so langsam!

  • Scripting.Dictionary Problem/Bug

    • diepfeile
    • 4. August 2018 um 13:31

    Jo, das ist das Problem! Und das ist Working as intended?

  • Reguläre Ausdrücke Sammlung

    • diepfeile
    • 4. August 2018 um 13:09
    Zitat von Tom99

    HTTP-Url

    Spoiler anzeigen
    Code
    /(https?):\/\/([0-9a-zA-Z][-.\w]*[0-9a-zA-Z]\.)+([a-A-Z]{2,9})(:\d{1,4})?([-\w\/#~:.?+=&%@]*~)/

    Wofür sind die '/' am Anfang und am Ende? Zudem funktioniert das bei mir nicht, obwohl ich die '/' weggelassen habe und das fehlende 'z' ergänzt habe.

  • Scripting.Dictionary Problem/Bug

    • diepfeile
    • 3. August 2018 um 13:12

    Das Problem ist doch, obwohl kein der Eintrag nicht existiert, macht die Abfrage danach ihn schon True.

  • Scripting.Dictionary Problem/Bug

    • diepfeile
    • 3. August 2018 um 02:39

    Der Code funktioniert nicht so wie ich mir das erhofft habe:

    Zitat

    $sItem = '123'
    $oDictionary = ObjCreate("Scripting.Dictionary")
    ConsoleWrite('$oDictionary.Exists($sItem): ' & $oDictionary.Exists($sItem) & @CRLF)
    ConsoleWrite('$oDictionary($sItem): ' & $oDictionary($sItem) & @CRLF)
    ConsoleWrite('$oDictionary.Exists($sItem): ' & $oDictionary.Exists($sItem) & @CRLF)
    ConsoleWrite('$oDictionary($sItem): ' & $oDictionary($sItem) & @CRLF)
    If $oDictionary($sItem) = '' Then ConsoleWrite('empty' & @CRLF)

    Alles anzeigen

    Das ist das Output:

    Zitat

    $oDictionary.Exists($sItem): False
    $oDictionary($sItem):
    $oDictionary.Exists($sItem): True
    $oDictionary($sItem):
    empty

    Sollte es nicht False bleiben, weil ich ja noch nichts hineingeschrieben habe?

  • FileGetSize Pfadlänge

    • diepfeile
    • 18. Januar 2014 um 18:03
    Zitat von Oscar

    Ich zitiere mal Wikipedia:

    Bei FileGetSize und FileMove funktioniert es, aber DirRemove scheint es nicht zu klappen.

    Selbst im Testscript nicht, die Ordner werden erstellt, aber nicht wieder gelöscht, obwohl error und extended je 0 sind.

    Code
    $dir = "\\?\" & @WorkingDir
    DirCreate($dir & "\blup\test")
    DirRemove($dir & "\blup",1) ; klappt nicht
    ;DirRemove(@WorkingDir & "\blup",1) ; klappt
    MsgBox(0, "", "Value of @error is: " & @error & @CRLF & "Value of @extended is: " & @extended)


    Funktioniert nur bis unter 255zeichen die restlichen Ordner fehlen sonst:

    Code
    $dir = "\\?\" & @WorkingDir
    DirCreate($dir & "\123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789l123456789m\123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789l123456789m\123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789l123456789m")
  • FileGetSize Pfadlänge

    • diepfeile
    • 15. Januar 2014 um 01:02

    Ich habe den Eindruck, dass bei FileGetSize die Pfad- und Dateinamenlänge zusammen nicht 255 Zeichen überschreiten darf. Auf jeden Fall gehts bei 241 Zeichen noch, bei 273 aber nicht mehr. Was kann man da machen, um auch die Größe von Dateien herauszubekommen die längere Pfade haben?

  • Mozrepl

    • diepfeile
    • 11. April 2013 um 23:10

    " MozRepl not working in version 20" die sind der gleichen Meinung wie ich. Nur weil da nichts von nem Fork oder einer Alternative steht, bedeutet das ja nicht das es keine gibt.

  • Mozrepl

    • diepfeile
    • 11. April 2013 um 19:40

    Früher ging es einwandfrei.
    Tools>Mozrepl>Start hab ich geklickt, ka ob da dann wenn es funktioniert ein Haken vor sein muss. Ist ajf nicht.
    Jetzt scheitert es ja schon an:

    Code
    _FFConnect("127.0.0.1", 4242)
    If @error Then
    	MsgBox(64, "Fail", "Can't connect to FireFox!")
    	Exit
    EndIf

    Man startet das Script, lange passiert nichts, dann kommt die Messagebox und dann das steht inner Konsole:

    Code
    >Running:(3.3.8.1):C:\Program Files (x86)\AutoIt3\autoit3.exe "R:\test.au3"    
    --> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop
    _FFConnect: OS:	WIN_7 WIN32_NT 7601 Service Pack 1
    _FFConnect: AutoIt:	3.3.8.1
    _FFConnect: FF.au3:	0.6.0.1b-3
    _FFConnect: IP:	127.0.0.1
    _FFConnect: Port:	4242
    _FFConnect: Delay: 	2ms
    _FFConnect ==> Timeout: TCPConnect Error: 10061
    _FFConnect ==> General Error: Timeout: Can not connect to FireFox/MozRepl on: 127.0.0.1:4242
    +>19:34:30 AutoIT3.exe ended.rc:0
    >Exit code: 0    Time: 67.243
    Alles anzeigen

    Ich glaub die 1.1 mozrepl version versteht sich nicht mit dem neuen FF20. Wobei wir wieder bei der ersten Frage wären: Gibt es irgendwo eine funktionierende Version von Mozrepl oder eine Alternative?

  • Mozrepl

    • diepfeile
    • 11. April 2013 um 00:54

    Hab ich ja gemacht. Aber wenn ich dann zu ihm verbinden will gehts es nicht mehr, liegt glaub ich mit der neuen Firefox version 20 zusammen.

  • Mozrepl

    • diepfeile
    • 10. April 2013 um 22:53

    Gibt es irgendwo eine funktionierende Version von Mozrepl oder eine Alternative?

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™