Beiträge von SEuBo

    $sNeuerName = StringRegExpReplace($sAlterName, '\W', '') ; Würde alles außer a-Z und 0-9 aus dem Namen entfernen.


    $sNeuerName = StringRegExpReplace($sAlterName, '[^-.\w\h]', '') ; Alles außer a-Z, 0-9, horizontale Whitespaces (Leerzeichen, TAB usw), '-' und '.'

    Bei meinen Tests war das Array immer leer


    Bist du sicher, dass der Array WIRKLICH leer ist?
    _ArrayDisplay hat nämlich, bedingt durch die Listview die es verwendet, Einschränkungen in der Zeichenlänge eines Strings.


    Und wer mal _StringBetween näher betrachtet hat, dem wird auffallen, dass es auf StringRegExp basiert. Sollte also keine Unterschiede ergeben.

    Das Problem ist, dass die Plugins die Funktionen im Hauptscript mit dieser Methode nicht nutzen können ...


    Das Stichwort hier ist interprozesskommunikation. Das geht entweder über TCP, über den Stdout-Channel (Also ConsoleWrite & StdoutRead) oder mit Windows-Nachrichten.
    Für letzteres dann hier nochmal ein Beispiel:


    (das kannst du übrigens im Prinzip so übernehmen für deine "plugins". Die aufzurufenden Funktionen werden in einer Warteschleife gehalten, wenn Sie beim Aufruf von PluginCall noch nicht aufgerufen werden können, und dann automatisch ausgeführt.


    Main.au3


    someplugin.au3

    @AutoItExe ... Funktioniert das auch von Computern aus, die kein Autoit drauf haben? Oder muss ich die Exe mitinstallieren?


    Wie AntiSpeed schon gesagt hat: Ja.


    Zitat


    Allerdings gibt mit Run eine 0 zurück. Was habe ich falsch gemacht?


    Probier es mal so rum:


    Hauptskript:
    $sScriptPath = @DesktopDir & '\someplugin.au3'
    $sParameters = '... das sind willkürliche informationen ... '
    Run(StringFormat('"%s" /AutoIt3ExecuteScript "%s" "%s"', @AutoItExe, $sScriptPath, $sParameters), @ScriptDir, @SW_HIDE)


    someplugin.au3:
    MsgBox(0,'',$CmdLine[1])


    /Edit
    Achso: Das ganze muss nicht mit Stringformat gelöst werden. Wenn dir das lieber ist, dann mach es so:
    Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $sScriptPath & '" "' & $sParameters & '"', @ScriptDir, @SW_HIDE)

    Du kannst, von dem Server-Script aus, auch einfach andere AutoIt Scripte direkt aufrufen (diese müssen nicht einmal als .exe vorliegen).

    ; $sScriptPath = Pfad zu der .au3 Datei, die du ausführen möchtest.
    Run(StringFormat('"%s" /AutoIt3ExecuteScript "%s"', @AutoItExe, $sScriptPath), @ScriptDir, @SW_HIDE, 4 + 2)

    Problem ist der CPU auslastung


    Bei der CPU Auslastung ist mir jetzt nichts aufgefallen - allerdings beim Reservierten Arbeitsspeicher schon.
    Das kommt einfach daher, dass im ganzen Script teilweise Ressourcen nicht wieder freigegeben werden.


    Als Beispiel sei hier nur mal $hFont in _GDIPlusAnimateAlphaLabel() gegeben, das in manchen Fällen 2x erstellt, aber nur 1x freigegeben wird. (z.B. wenn $AnType = 1 oder 2 ist).
    Ein _GDIPlus_FontDispose($hFont) vor den jeweiligen Stellen (z. 91 & 108) hilft da etwas.


    Außerdem wird das in _CreateGraphic erstellte Graphics-Objekt (_GDIPLus_ImageGetGraphicsContext) in _SetCleanGraphic nicht gelöscht (_GDIPlus_GraphicsDispose !).
    Das scheint aber noch nicht alles gewesen zu sein - der RAM Verbrauch steigt weiterhin - wenn auch langsamer.


    Ich hab allerdings keine Lust und Muße mehr, mich da noch weiter reinzuarbeiten.
    Ich hoffe ich hab jedenfalls schonmal einen Schubser in die richtige Richtung geben können.

    In SciTE auf Tools -> SciTE Config (Alternativ Strg + 1 in SciTE).
    Im Reiter 'Color Settings' Klickst du auf den 'Fore' Button in der ersten Zeile, und wählst deine Farbe. Mit 'Update' anschließend die Änderungen übernehmen, und fertig.

    Kann mehrzeiligen AutoIt Code ausführen


    Wäre so jedenfalls besser als mit einem Loop über alle Zeilen einzelnd, die dann mit Execute ausgeführt werden:

    FileWrite(@TempDir & '\au3code.au3', $Code)
    RunWait(StringFormat('"%s" /AutoIt3ExecuteScript "%s"', @AutoItExe, @TempDir & '\au3code.au3'))
    FileDelete(@TempDir & '\au3code.au3')


    Weil