11.13 execute()

Mit Hilfe dieser Funktion kann aus dem Dialogskript ein anderes Programm gestartet werden. Je nach dem zugrundeliegendem Betriebssystem werden hier unterschiedliche Arten von zu startenden Programmen unterstützt.

Definition

boolean execute
(
      string  Command   input
  { , string  Arguments input }
  { , boolean Synchronous := false  input }
  { , enum ExeType    := exenormal  input }
  { , enum WindowType := showwindow input }
  {   object  Object input
    , integer Event  input
  { , anyvalue ReplyData input } }
)

Parameter

string Command input

In diesem Parameter wird der Name des auszuführenden Programms und dessen Pfad übergeben. Dabei kann der Pfad in der für das Betriebssystem üblichen Art angegeben werden, relative Pfade sind auch erlaubt. Zusätzlich kann der Pfad auch in der für den IDM üblichen Art und Weise mit Hilfe von Umgebungsvariablen definiert angegeben werden.

Wenn diese Funktion auf Microsoft Windows benutzt wird, kann hier stattdessen ein spezielles Windows-Kommando angegeben werden, das ausgeführt werden soll. In diesem Fall startet Microsoft Windows dann das zu dem Dokument gehörende Programm und führt den angegebenen Befehl aus, vorausgesetzt, dass der Befehl vom Programm unterstützt wird.

Zur Zeit unterstützt Microsoft Windows folgende Befehle: open, print und explore. Alle aktuell gültigen Kommandos können dem Microsoft Windows Handbuch für die Funktion ShellExecute() entnommen werden. Wenn dieses vom Dokument abhängige Starten eines Programms genutzt werden soll, muss beim Parameter ExeType execommand angegeben werden.

string Arguments input
Dieser Parameter ist optional. In diesem Parameter können die Argumente für das zu startende Programm übergeben werden.
boolean Synchronous := false input

In diesem optionalen Parameter kann angegeben werden, ob das Programm synchron oder asynchron zu dem aktuellen Programm gestartet werden soll. Beim synchronen Start wartet der IDM bis das gestartete Programm beendet worden ist. Während dieser Zeit ist keinerlei Verarbeitung im IDM möglich.

Hinweis

Der synchrone Modus ist nicht zu empfehlen, da dies auf jeden Fall die weitere Bearbeitung des aktuellen Programms durch den Benutzer verhindert. In diesem Fall werden alle Ereignisse in eine Queue gestellt, bis die Verarbeitung wieder fortgesetzt wird.

enum ExeType := exenormal input

In diesem optionalen Parameter kann der Typ des auszuführenden Programms angegeben werden. Dieser Parameter wird nur auf dem Betriebssystemen Microsoft Windows ausgewertet.

Wertebereich

exenormal

Bei dem Programm handelt es sich um ein normales Programm.

exeshell

Bei dem angegebenen Programm handelt es sich um ein Programm, das nur innerhalb einer Shell gestartet werden kann, z.B. ein Kopierkommando. Daher wird für das angegebene Programm zuerst eine Shell und dann erst das eigentliche Programm gestartet.

execommand (nur IDM für Windows)

Bei dem angegebenen Programm handelt es sich um einen Befehl, der von dem zum Dokument gehörenden Programm ausgeführt werden soll. In diesem Fall ist es nicht möglich, den Rückgabewert des Programms abzufragen. Zusätzlich wird bei dieser Art von Programm der Synchronous-Parameter ignoriert (siehe Parameter Command).

enum WindowType := showwindow input

In diesem optionalen Parameter kann die Art, wie das Startfenster des gestarteten Programms erscheinen soll, angegeben werden. Dieser Parameter wird nur auf dem Betriebssystemen Microsoft Windows ausgewertet.

Wertebereich

hidewindow

Das Startfenster des zu startenden Programms soll verborgen bleiben, da in der Regel nur ein Befehl ausgeführt werden soll.

maxwindow

Hiermit wird die angegebene Anwendung aufgefordert maximiert zu starten.

minwindow

Das Startfenster des zu startenden Programms soll verkleinert zum Symbol geöffnet werden.

showinactive

Das Startfenster des zu startenden Programms soll zwar geöffnet werden, soll aber nicht das aktive Fenster werden.

showwindow

Das Startfenster des zu startenden Programms soll das aktive Fenster werden.

Achtung

Die gestartete Anwendung muss diesen Parameter nicht beachten.

Wenn der ExeType-Parameter den Wert exeshell besitzt, wird der Kommandointerpreter maximiert gestartet und nicht die Anwendung, die der Kommandointerpreter startet.

object Object input
In diesem optionalen Parameter kann ein Objekt angegeben werden, an das ein externes Ereignis geschickt werden soll, wenn das zu startende Programm beendet worden ist. Wenn dieser Parameter angegeben ist, muss auch der nachfolgende Parameter Event angegeben werden.
integer Event input
Dieser Parameter darf und muss nur angegeben werden, wenn der Parameter Object angegeben worden ist. In diesem Parameter wird dann die Nummer des externen Ereignisses angegeben, das an das angegebene Objekt nach Beendigung des Programms geschickt werden soll.
anyvalue ReplyData input
Dieser optionale Parameter darf nur dann angegeben werden, wenn ein Objekt für ein externes Ereignis angegeben worden ist. In diesem Parameter wird dann ein beliebiger Wert angegeben, der an die Regel nach Ende des Programms übergeben werden soll.

Rückgabewert

true
Programm konnte gestartet werden.
false
Das Programm konnte nicht gestartet werden.

Reaktion auf Beendigung des Programms

Um auf die Beendigung eines Programms zu reagieren, bietet der IDM die Möglichkeit, ein externes Ereignis mit dem Exitcode des Programms und einem benutzerdefinierten Wert zu schicken. Daher hat die Regel, die auf das Ende des Programms reagieren soll, zwei Parameter. Im ersten integer-Parameter wird der Exitcode des Programms übergeben, im zweiten ein anyvalue-Parameter, in dem der beim Aufruf von execute() angegebene Wert übergeben wird

Auswertung der Parameter

Die Auswertung der einzelnen Parameter ist extrem plattformabhängig. Dies wird in der nachfolgenden Tabelle dargestellt:

 

Synchronous

ExeType

WindowType

Externes Ereignis

Windows

wird unterstützt

wird unterstützt

wird unterstützt

wird unterstützt (nicht bei ExeType = execommand)

Motif

wird ignoriert

wird ignoriert

wird ignoriert

wird unterstützt

Unter Windows kann bei ExeType = execommand nicht auf den Rückgabewert des Kommandos gewartet werden.

Unter Windows kann auf maximal 32 Prozesse im Dialog reagiert werden.

Hinweis zu Anführungszeichen

Ein Einschließen des Command-Parameters in Anführungszeichen ist nicht notwendig, für die weiteren Parameter hingegen schon.

Zur Vereinfachung wird unter Microsoft Windows der Command-Parameter automatisch mit doppelten Anführungszeichen eingeschlossen, wenn dieser Parameter Leerzeichen aber keine doppelten Anführungszeichen enthält. Zusätzlich muss hier der ExeType-Parameter auf den Wert exenormal oder exeshell gesetzt werden.

Außerdem werden aus dem Command- und Arguments-Parametern zusammengesetzte Kommandos automatisch mit Anführungszeichen eingeschlossen, wenn der Command-Parameter mit doppeltem Anführungszeichen (schon angegeben oder automatisch hinzugefügt) beginnt und der ExeType-Parameter den Wert exeshell besitzt.

Sollte dieses Verhalten nicht gewünscht sein, so kann der Command-Parameter leer (null oder "") und das eigentlich auszuführende Kommando – in diesem Fall zwingend – im Arguments-Parameter übergeben werden.

Beispiel

dialog Exe

on dialog start
{
  variable boolean Started;

  !! start idm without waiting and event
  Started := execute("idm", "-IDMversion");
  print "idm started";
  print Started;

  !! start with event
  Started := execute("idm", "-IDMversion", this, 100, "testmessage");
  print "External event 100 should appear";
  print Started;

  !! start with options for the startwindow
  !! idm ignores this option
  Started := execute ("idm", "-IDMversion", hidewindow, this, 100);
  print "Window should not appear";
  print Started;

  !! start idm synchronous
  Started := execute ("idm", "-IDMversion", true);
  print "Synchronous start";
  print Started;

  !! example with searchsymbol
  Started := execute ("IDM_PATH:idm", "-IDMversion");
  print "Started with searchsymbol";
  print Started;
}

on dialog extevent 100 (integer Exitcode, anyvalue Message)
{
  print "Returnvalue: " + itoa(Exitcode) + " " + Message;
}