Verzögerung bei Script via Button

Bin jetzt von MIDI auf Scripting umgestiegen und wollte den ShellExecute Befehl testen und einen Batch ausführen. Bei dem Test hat sich gezeigt: Via “Öffnen” - “Script ausführen” läuft alles - wenn man das Script via einen Button ausführt dauert es ein paar Sekunden bis der Batch läuft.
Für den Test öffnet die Batch-Datei einfach Paint.

begin
ShellExecute(‘mspaint’,’’);
end.

Die paar Sekunden sind für meine Anwendung zu lange. An was kann das liegen?

Niemand eine Idee? :slightly_frowning_face:

Nicht so direkt. Schreib mal vor das ShellExecute noch:

SystemLog('Test');

Dann beobachte das Systemprotokoll, ob die “Test”-Meldung sofort kommt oder ebenfalls verzögert.

Bevor ich den Test machen konnte, ist mir Folgendes aufgefallen:
Der Button wird über das DHD-Pult angesteuert, ist das Pult aus und schalte ich den Button per Maus ein, startet Paint sofort.
Ist das Pult an und starte ich den Button damit, dauert es bis Paint kommt - auch beim Einschalten mit der Maus, wenn das Pult eingeschaltet ist.

UPDATE

Im Systemlog wird das “Test” Wort auch erst Sekunden (bei meinem Test 21 Sekunden) später angezeigt.
Es passiert immer wenn das Pult eingeschaltet ist. Andere Button sind ebenso betroffen und auch andere Befehle. Ich habe es mit einer Logik am DHD getestet, sie startet zur gleichen Zeit wie Paint - verzögert.
Ansonsten ist die Verbindung mit dem Pult tadellos - alles reagiert sofort auf Zustandsänderungen.
Es dürfte hier wirklich an den Buttons liegen.

Was kann ich da tun?

Du hast also einen Button (Bildschirmobjekt nehme ich an) mit der Aktion “Script ausführen”.

An welcher Stelle sollte denn eine evtl. vorhandene Verbindung zu einem DHD-Pult hier eine Rolle spielen? Ist das irgendwo mit dem Button “verwoben”?

Das Pult schaltet den Button via DHD Protokoll ein und der Button (ja, ein Bildschirmobjekt) führt das Script aus.
Wird die entsprechende Logik am DHD ausgeführt springt der Button sofort auf aktiv, das Script wird aber erst Sekunden später ausgeführt. Klicke ich mit der Maus auf den Button startet das Script sofort.

Kann das DHD das Skript direkt, ohne Verzögerung starten? Dann lasse das Skript den Button aufleuchten.

Aktive Grüße

TSD

Ich wüsste nicht wie…
Denn das DHD kann nur Fernsteuerung sein.

Na, es gibt doch die procedure OnDHDCommand:

Wie Du Die Data-Blöcke definierst, weiß ich von hier aus nicht, ich habe leider kein DHD-Pult. Aber da Du einen Button aufleuchten lassen kannst, geht auch folgendes: Zwischen begin und end; setzt Du ein

RunScript('C:\{Pfad}\meinscript.mls');

Damit startet eine Aktion am Pult direkt das meinscript.mls, welches unter dem entsprechenden {Pfad} auf Deiner Festplatte liegt. In diesem Script steht das, was Du eigentlich scripten willst (also das, was Dein Button ausführen soll) und ein

ExecuteCommand('MEINBUTTON ON');

MEINBUTTON ist der Button, der aufleuchten soll. Diesem Button mußt Du noch das Aktionen ausführen bei Fernsteuerung per nicht-Häkchen abgewöhnen, sonst würde das Script ja zweimal ausgeführt. Soll das Script auch durch anklicken des Buttons ausgeführt werden sollen, setzt Du die RunScript-Zeile auch noch in die Button-Definition ein.

Das klingt jetzt ziemlich altklug, und vielleicht funktioniert es auch gar nicht, aber ausprobieren würde ich’s mal.

Ferngesteuerte Grüße

TSD

Ja, leider kann ich es nicht ausprobieren - weiß leider auch nicht was ich da eintragen soll.

Magst du uns eigentlich mal erklären, was das Script am Ende bezwecken soll? Oder ist es am Ende nur Spielerei? :slight_smile:

Nun, wer hat denn Dein Pult eingerichtet? Wie gesagt, wenn Du es schaffst, daß das Pult einen Button zum aufleuchten bringt, dann setze an der Stelle, wo {Name des Buttons} ON steht, eben RUNSCRIPT('{usw.}') ein. Das ganze spielt sich, wenn ich es recht verstehe, auf mAirList-Ebene ab – ich würde in der Konfiguration unter Fernsteuerung → DHD-Fernsteuerung konfigurieren → Logik → Befehle anfangen zu suchen.

Ansonsten lag mir Torbens Frage auch schon auf der Zunge.

Substituierte Grüße

TSD


Edit: Oder es läuft bei Dir ein Hintergrund-Skript mit obiger Prozedur und den entsprechenden Zeilen.

Das soll - wie bereits geschrieben - einen Batch ausführen, der Befehle an einen Arduino im Netzwerk schicken soll (diese speziellen IT-Fragen klärt mein IT-Kollege).
Da ich Tontechniker und nicht IT-Fachmann bin, kenne ich mit Scripting nicht aus - ergo kann ich ein DHD-Pult einrichten (denn das hat wenig mit Scripting zu tun), jedoch nicht scripten und somit außerhalb der Mairlist-GUI arbeiten.

Mir war nicht klar, dass ich bei den Befehlen in der Fernsteuerungskonfig auch den Befehl “RUNSCRIPT” einfügen kannt - wie gesagt no ITler. Das klingt aber nach der Lösung - danke!
Dennoch: Warum funktioniert das nicht wie es soll? Ist ja auch mit funktionierendem Workaround eine berechtigte Frage, wie ich meine.

Obige Prozedur ist für mich nicht nachvollziehbar mangels Wissen, daher werde ich die Variante ohne Hintergrund-Script probieren.

Um diese Frage beantworten zu können, müßten wir eben näheres über Deinen Batch erfahren – Inhalt, wo gespeichert, wie konkret aufgerufen etc. pp. Vielleicht mag Dein IT-Kollege sich ja dazu mal äußern.

Glaskugellose Grüße

TSD

Der Batch ist aktuell noch gar nicht im Spiel.
Wie bereits ausgeführt, teste ich aktuell einfach mit dem ShellExecute - der Befehl öffnet derzeit keinen Batch, sondern einfach das Programm Paint - um eben zu testen.
Und dieser Test hat gezeigt: es gibt ein Delay von mehreren Sekunden.

Richtig. (Ist schon eine Woche her, daß Du das schriebst, hatte ich aus den Augen verloren.) Hattest Du auch einmal probiert, den vollständigen Pfad zu Paint einzutragen?

begin
  ShellExecute('C:\{vollständiger Pfad}\mspaint.exe', '');
end.

Komplettierte Grüße

TSD

Der vollständige Pfad hat auch nichts geändert…
Was jedoch das gewünschte Ergebnis gebracht hat: Die Logik via Runscript gleich mit dem Script zu verknüpfen.

Warum das via Button so lange dauert, bleibt also weiterhin rätselhaft…