Beiträge von Crys

    Funktioniert bedeutet bei mir, das ein Script zumindest in 99,8% aller Fälle die von mir erwarteten Ergebnisse liefert... [...]

    Wie beschrieben hat es ja nur bei einer von 150 Dateien nicht geklappt, also liegt meine Quote von 99,3% deutlich unter deiner "Funktioniert"-Quote ;)

    Aber sorry, ich weiß leider nicht was du mir mit dem Beispiel aufzeigen möchtest.


    @ Oscar:

    Vielen Dank, dein Skript ist zwar groß, hat aber das Exif-Auslesen viel einfacher gemacht und zudem auch schneller!

    Danke für deine schnelle Antwort.

    Du könntest die EXIF-Daten direkt in AutoIt auslesen, so sparst du dir den Umweg über eine externe Exe.


    Liebend gerne, aber ich habe dazu keine echte Lösung gefunden. Hast du da einen Ansatz für mich?


    Mit dem Datei schreiben probiere ich das mal. Das wird aber sicher an der Performance zerren!?

    Servus Zusammen,

    schaue nach langer Abstinenz mal wieder hier vorbei :S


    Ich möchte Ausgabe eines CMD-Befehls zuverlässig erfassen, im konkretten geht es dabei EXIF-Werte eines Bildes mittels des ImageMagicks Moduls zu bestimmen.


    Der Code ist nicht schön, aber funktioniert ... zumindest meistens. Ich lasse ca. 150 Bilder im Stapel ausführen und immer hängt es bei einem Bild ... mal Bild 14, 52, 98, 143 ... ganz beliebig ohne Schema, auch wenn ich immer das selbe Bild kopiert verwende.


    Irgendwie spuckt die CmdOutput Fkt. manchmal ein leeres Ergebnis aus, mal einen Fehler, das eine Datei nicht gefunden wurde, mal wird das Ergebnis vom Bild davor ausgegeben ?(


    Wie mache ich das besser und vor allem richtig? Das die Funktion immer funktioniert?


    Vielen Dank ;)

    Und zwar möchte ich Anführungszeichen in AutoIt und CMD auskommentieren, da ich mehr als zwei Arten benötige.


    Konkretes cmd Beispiel:

    Code
    convert datei.jpg -gravity NorthEast -font Calibri -pointsize 25 -fill black -draw "text 0,0 'Text'" ausgabe.jpg


    Damit bearbeitet man Bilder mit ImageMagick: http://www.imagemagick.org/Usage/fonts/
    Man muss um den "Text" Anführungszeichen setzten, damit man auch Leerzeichen verwenden kann.
    Und um die Parameter von "-draw", also das "text 0,0 'Text'", muss man (meines erachtens nach) auch Anführungszeichen setzten, damit das auch funktioniert.
    Jetzt schon schon zwei Arten von Anführungszeichen im Spiel ...


    In AutoIt kann man das nur noch so umsetzten:
    $sText = "'Text'"
    RunWait(@ComSpec & ' /c convert datei.jpg -gravity NorthEast -font Calibri -pointsize 25 -fill black -draw "text 0,0 ' & $sText & '" ausgabe.jpg')
    So kann man um "Text" Anführungszeichen setzten und die selben auch für die AutoIt Zeile verwenden.


    Jetzt möchte ich aber als Text z.B. das verwenden: "AutoIt" ist eine Skriptsprache
    (Also mit Anführungszeichen um AutoIt.)
    Ich habe keine Ahnung wie ich das jetzt umsetzten könnte.


    Könnt irhh mir weiter helfen?


    Danke! :)

    Wie werden WildCards in AutoIt angegeben?


    Konkret:
    Ich möchte mit "_FileListToArray()" einen Ordner durchsuchen, aber bestimmte Datei Typen außen vor lassen.
    Sprich alle Dateien (*.*), bis auf einige (*.xyz; *.yz; ...) im Array haben.


    In der Beschreibung steht: "Für mehr Details ist in der Autoit3-Hilfedatei nach dem Stichwort "WildCards" zu suchen.", als keinen einzigen Treffer bringt ...


    autoit.de/wcf/attachment/22207/

    Ich greife mit der WinHTTP.au3 UDF auf ein paar API zu und lange Dateien runter (bei denen man sich per _POST anmelden muss).
    Nur habe ich festgestellt, dass wenn der Seitenaufbau mehr als 30s benötigt gar kein Inhalt zurück gegeben wird!


    Ich habe das gelogt: alle Verbindungen die <30s sind funktionieren, alle die >=30s sind funktionieren nicht.
    Genauer, wenn _WinHttpSendRequest() 30s aktiv ist, kommt kein Inhalt an. Ein Header wird gesendet.


    Wieso wird die Verbindung nach 30s abgebrochen?
    Wie kann ich das verhindern?


    ja, brauche ich das?
    Ich möchte ja keine Dateien versenden ...


    Ich habe das jetzt so gelöst, indem ich Server und Client wieder getrennt habe, weiß nicht wieso ich das so kompliziert machen wollte:


    Ich habe irgendwo einmal gelesen, dass TCPAccept() nach einer gewissen Zeit aufhört, nichts mehr macht, dass man es nur eine bestimmt Anzahl aufrufen kann. Konnte sowas bei mir noch nicht feststellen ...

    Ich möchte Daten von PC A, nach PC B senden ... ich denke das geht am besten per TCP, denn dass soll nur im Intranet geschehen.


    Ich habe mal aus den Beispielen von TCPRecv() den Server und TCPSend() den Client ein Programm geschrieben, dass senden und verschicken kann:


    Es funktioniert auch soweit gut!
    Man kann Nachrichten versehen, mehr nicht.
    Kann man das noch vereinfachen?


    Das obige ist nur ein Test, ich möchte das Programm umschreiben, sodass PC A einen String (ca. 5kb) an PC B sendet. PC B kontrolliert diesen String und gibt eine kurze Antwort (8bytes) an PC A.
    PC A läuft immer, PC B ist nicht immer an. PC A soll prüfen ob PC B an ist, wenn ja sendet es den String, falls nein eben nicht.
    Das obige Skript möchte ich in der Form im schreiben. Macht das Sinn?
    Gibt es noch eine bessere Möglichkeit?

    Danke, so ähnlich habe ich es bereits umgesetzt.


    Ich komme da nicht weiter:

    Pff, nein :P


    Mit dem sleep() habe ich ja simuliert, dass das Programm läuft und gerade nicht reagiert.
    Dann soll man mit "Beenden" auch das Programm abbrechen können!


    Selbst bei meinem sleep(200), beendet der das Programm erst nach 10-20s.
    Wenn ich dasif TrayItemGetState($exititem) = $TRAY_CHECKED then exitnoch entferne, dann beendet er das Programm nie ...

    Ich möchte einen Knopf erzeugen, wie er auch im std. TrayMenü bei AutoIt Skripten ist.
    Du einen Klick soll ein Programm, egal was es gerade macht, abgebrochen werden.
    Nur klappt das nicht, wenn ich versuche das nachzubauen:#Include <Constants.au3>


    Opt("TrayMenuMode", 1)


    $exititem = TrayCreateItem("Beenden")


    While 1
    if TrayItemGetState($exititem) = $TRAY_CHECKED then exit
    $msg = TrayGetMsg()
    Select
    Case $msg = $exititem
    ExitLoop
    EndSelect
    sleep(2*100)
    WEnd
    Es soll einfach durch einen Klickt auf ein Element im TrayMenü das Programm unverzüglich abgebrochen werden. Wie mache ich das?

    Irgendwie wird der $bGeladen = true nicht von der AdlibRegister-Fkt. auf den Rest übertragen!?


    .... Oder, wenn man "Platz sparen" will, mit Startparametern den Code ausführen zu lassen, wenn ihr wisst wie ich das meine. So kann man sich die zusätzliche Exe sparen, da man dann nur 1 Script hat ;)

    Hm, dass das Skript sich dann selbst noch einmal mit Startparameter öffnet, aber dann etwas ganz anderes macht.
    Also mit Parameter lade_etwas() ausführt und ohne Parameter GUI und den Rest ausführt!?
    Kann das nicht zu Problemen führen, wenn das selbe Programm zweimal aktiv ist?
    Die Idee ist aber echt gut :)

    So, jetzt läuft auch das Beispiel.

    also die einfachste idee die mir jetzt so auf die schnelle eingefallen ist wäre, wenn du den teil in "lade_etwas()" einfach zu einer exe datei machst und die dann einfach startest. so wird der teil nur einmal kurz aufgerufen und läuft parallel zum hauptscript ;) ist jetzt natürlich nur so eine idee....keine ahnung ob das bei deinem programm gehen würde ;)

    Ja, würde gehen, hab ich ja auch als Möglichkeit schon in Betracht gezogen, aber das wird komplizierter, als wenn alles in einem Skript laufen würde ...


    Ich würde AdlibRegister nehmen.

    Danke, das kann ich für etwas_geladen() und frage_ab() verwenden!

    Ich möchte eine Funktion ausführen (lade_etwas()), die eine längere Zeit (ca. 30s) läuft. Dabei soll das Skript aber weiter laufen.
    Wie mache ich das, ohne dass das Skript einfriert?


    Es wird immer getestet (etwas_geladen()) ob obige Funktion gestartet ist, dann soll man z.B. auf einen Knopf innerhalb von 15s drücken, damit etwas gesendet wird (sende_etwas()).
    Wenn die man den Knopf drückt oder die Zeit abläuft soll die oben genannte Funktion wieder gestartet werde.
    Dafür habe ich einen Timer verwendet, ist das soweit ok?


    Dann möchte ich noch, dass alle 10s etwas anderes abgefragt wird (frage_ab()).
    Das auch wieder mit einem Timer, macht das Sinn?



    Mir geht es vor allem um die Fkt. lade_etwas(), die lange etwas ladet (Zeit ist dynamisch).
    Ich habe auch schon überlegt ob das ein anders Skript ausführt und an dieses, wenn fertig, das Ergebnis übergibt!?