Frage zu $CMDLine

  • Hallo,

    ich habe da ein kleines Problem mit $CMDLine.

    Man kann ja mit der rechten Maustaste auf eine Datei klicken um damit ein Autoit-Programm zu starten.

    Der entsprechende Dateiname (den man angeklickt hat) wird ja im Array $CMDLine an AutoIt übergeben.

    Soweit funktioniert das prächtig.

    Nur das AutoIt-Programm das ich so aufrufe kann immer nur eine Datei bearbeiten, ich kann aber auch mehrere Dateien auswählen und mit der rechten Maustaste anklicken.

    Dann wird für jede markierte Datei eine neue Instanz von Autoit gestartet und ein anderer Dateinamen übergeben und das gibt dann ein ordentliches Datenchaos.

    Also, das muss ich unbedingt verhindern.

    Gibt es da irgendeine Möglichkeit, wie man feststellen kann, wie viele Programme ausgewählt wurden?

    Wenn ich das mit: "_Singleton("Skript", 1) = 0" probiere, muss ja zu mindestens eine Instanz gestartet sein, aber dann darf diese Instanz nicht sofort komplett ausgeführt werden, sondern sie muss erst testen, ob da noch andere Instanzen aufgerufen werden und wenn da z.B. innerhalb von zwei Sekunden noch andere Aufrufe kommen, muss sie das Skript abbrechen.

    ich sehe da wohl irgendwie vor lauter Bäumen den Wald nicht mehr.

    Hat da einer eine Idee (ich vermute mal, das geht ganz einfach nur komme ich nicht darauf)?

  • Ich hatte ein ähnliches Problem (es wurden mehrere Instanzen gleichzeitig gestartet, es durfte jedoch jeweils nur eine Instanz eines Skriptes aktiv sein. Wenn diese Instanz geendet hatte, dann durfte eine andere Instanz weiterarbeiten) und konnte es mit folgendem Code zur Zufriedenheit lösen.

    Dazu habe ich die Standardfunktion _Singleton etwas angepasst.

  • Hallo water,

    nun habe ich das mal ausprobiert.

    Zuerst:

    Danke es funktioniert:thumbup:

    Aber irgendwie verstehe ich nicht, wie das ganze eigentlich funktioniert.

    Könntest du mir das mal etwas genauer erklären?

    Wozu dient z.B die Zeile: "Sleep(@AutoItPID * 10)"?

    Ein Problem habe ich auch noch.

    Das Programm, welches ich so aufrufe, zeigt mir u.a. nach dem erfolgreicher Aktion ein Fenster zur Info an.

    Aber es wird immer nur miniert gestartet, sodass ich es jedesmal erst normal anzeigen lassen muss um das Fenster zu sehen.

    Es müsste also normal starten und nicht sofort im Hintergrund verschwinden.

    Nur um das Problem selber zu lösen müsste ich das ganze zuerst mal verstehen (Wo wird z.B. mein Programm aufgerufen).

    MfG:

    BigRox

  • Problem #1

    Wir haben eine Fremdsoftware, die für alle Einträge aus einer Tabelle mein Skript started. D.h. 20, 30 Aufrufe meines Skripts erfolgen gleichzeitig.
    Wenn ich eine fixe Wartezeit hätte, dann würden alle Skripte gleichzeitig auf _Singleton prüfen. Dies führte bei uns zu Lockdown-ähnlichen Situationen, da mehrere Skripte aufeinander warteten.
    @AutoItPID ist die Prozess-ID der Skript-Instanz und somit so unterschiedlich, dass die _Singleton-Prüfungenen zu leicht unterschiedlichen Zeiten erfolgen => Problem behoben.

    Problem #2
    Muss es wirklich ein Fenster sein? Normalerweise verwendet man eine Log-Datei dafür in die man den Status schreibt. Besonders wenn man viele Aufrufe des Skripts hat, verliert man bei Fenstern leicht den Überblick.