GeoRun Library

1. Starten und Beenden von anderen Applikationen

2. Fernsteuern anderer Applikationen


Die GeoRun Library erlaubt dem R-BASIC Programmierer mit anderem GEOS-Applikationen zu kommunizieren. Das können sowohl R-Apps (compilerte R-BASIC Programme) als auch andere GEOS-Applikationen, wie z.B. GeoWrite, sein. Dabei kann bei Bedarf eine Datendatei übergeben werden.

Um die GeoRun Library verwenden zu können, müssen Sie sie includen:

Include "GeoRun"

^

1. Starten und Beenden von anderen Applikationen

GeoRunStartApplication Übergibt eine Datei an eine Applikation, deren GeodeToken Sie kennen. Bei Bedarf wird die Applikation gestartet.
GeoRunOpenFile Öffnet eine Datendatei, wobei die zugehörige Applikation aus dem Typ der Datei ermittelt wird.
GeoRunFindDosApp Ermittelt die zu einer DOS-Datei gehörende GEOS Applikation.
GeoRunTestRunning Prüft, ob eine bestimmte GEOS-Applikation bereits läuft.
GeoRunCloseAppliaktion Schließt eine laufende GEOS-Applikation.


GeoRunStartApplication

GeoRunStartApplication öffnet eine GEOS-Applikation und übergibt ihr eine Datendatei. Sie müssen selbst darauf achten, dass der Typ der Datei zur Applikation passt.

Sie können GeoRunStartApplication auch verwenden, um einer bereits laufenden Applikation eine (weitere) Datei zu übergeben.


Deklaration:

FUNCTION GeoRunStartApplication(appToken as GeodeToken, dataFile as String(32)) as WORD

Parameter:
appToken: GeodeToken der zu öffnenden Applikation.
Wenn die Applikation noch nicht läuft, wird sie gestartet. Dazu muss sie sich im World-Verzeichnis, einem seiner Unterverzeichnisse oder im SysAppl-Verzeichnis befinden.

dataFile: Name der zu übergebenden Datei.
Die Datei muss sich im aktuellen Ordner befinden und zur zu startenden Applikation passen. Ein Leerstring ist zulässig.

Return: Null oder Fehlercode.
Die globale Variable fileError wird gesetzt. Siehe unten.

Hinweise:

  • Ist das zugehörige Programm ein R-BASIC Programm, so wird die Datei dem OnStartup-Handler übergeben, falls das Programm neu gestartet werden müsste. Läuft es bereits, so wird die Datei dem OnConnection-Handler übergeben.

  • GeoRunStartApplication kann (wie jede Function in R-BASIC) auch wie eine SUB benutzt werden. Siehe Beispiel.


Details zum Fehlercode

GeoRunStartApplication und GeoRunOpenFile liefern Null, wenn die Applikation erfolgreich gestartet werden konnte bzw. bereits läuft. Andernfalls liefern die Routinen einen Fehlercode. Außerdem setzen diese Routinen die globale Variable fileError (Null oder Fehlercode).

Positive Fehlercodes und Fehlercodes im Bereich von -50 bist Null sind R-BASIC "Standard"-Codes. Sie können die Routine ErrorText$() verwenden, um eine Beschreibung des Fehlers zu erhalten. Typische Fehlermeldungen sind:

ERROR_FILE_NOT_FOUND: Die Datendatei existiert nicht im aktuellen Ordner
ERROR_ACCESS_DENIED: Der Zugriff wurde verweigert. Dieser Fehler tritt auch auf, wenn Sie einen Ordner statt einer Datei angeben.

Die Fehlercode -51 und -52 sind library-interne Fehler. Sie sind folgendermaßen definiert:

CONST LIB_ERROR_OPENING_APP      = -51
  ! Die Applikation konnte nicht gestartet werden, meist weil
  ! keine Applikation mit dem übergebenen Token gefunden wurde.
CONST LIB_ERROR_NO_DOS_APP       = -52
  ! Es wurde keine passende DOS-Applikation in der INI gefunden.
  ! Auch ein *.* - Eintrag existiert nicht.
Beispiel: Öffnen von GeoWrite mit einer Datei im Document-Ordner
DIM AppToken AS GeodeToken

  AppToken.tokenchars = "WP00"
  AppToken.manufid = 0
  SetStandardPath(SP_DOCUMENT)
  
  GeoRunStartApplication(appToken, "Karte Danke")


GeoRunOpenFile

GeoRunOpenFile übergibt eine Datei an die zugehörige Applikation, damit diese sie öffnen kann. Die Datei muss sich im aktuellen Ordner befinden. Für VM-Dateien (z.B. GeoWrite-Dokumente) und GEOS Daten-Dateien wird die zugehörige Applikation aus dem Dateityp ermittelt (Creator-Token), für DOS-Dateien wird die zugehörige Applikation aus der GEOS.INI ( [fileManager] : filenameTokens) gelesen.


Deklaration:

FUNCTION GeoRunOpenFile(dataFile as String(32)) as WORD

Parameter:
dataFile: Name der zu öffnenden Datei.
Die Datei muss sich im aktuellen Ordner befinden. Die zugehörige Applikation wird automatisch ermittelt.

Return: Null oder Fehlercode.
Die globale Variable fileError wird gesetzt. Siehe auch: GeoRunStartApplication.

Hinweise:

  • Ist das zugehörige Programm ein R-BASIC Programm, so wird die Datei dem OnStartup-Handler übergeben, falls das Programm neu gestartet werden müsste. Läuft es bereits, so wird die Datei dem OnConnection-Handler übergeben.

  • GeoRunOpenFile kann (wie jede Function in R-BASIC) auch wie eine SUB benutzt werden.

  • Wenn Sie nicht wollen, dass bei einer DOS-Datei, für die keine explizite Zuweisung in der GEOS.INI existiert, die Default-Zurdnung "*.*" verwendet wird, benutzen Sie GeoRunFindDosApp, um zu prüfen, ob eine explizite Zuweisung in der GEOS.INI existiert.

  • GeoRunOpenFile kann auch eine Applikation starten, wenn sie sich im aktuellen Ordner befindet.
Beispiel: Öffnen einer Grafik-Datei im Document-Ordner
  SetStandardPath(SP_DOCUMENT)
  GeoRunOpenFile("MANJUL.GIF")


GeoRunFindDosApp

GeoRunFindDosApp durchsucht die GEOS.INI nach der zu einer DOS-Datei gehörenden Applikation und liefert das zugehörige GeodeToken.


Deklaration:

FUNCTION GeoRunFindDosApp(dataFile as String(32), findStar as Integer) as GeodeToken

Parameter:
dataFile: Kompletter Name der DOS-Datei.
Wenn Sie nur die Dateierweiterung kennen, übergeben Sie hier einen fiktiven Namen, z.B. "X.EXT" oder "*.EXT".

Übergeben Sie niemals nur die Dateierweiterung! Das wird als Dateiname ohne Erweiterung interpretiert!

findStar: TRUE oder FALSE
TRUE: Falls keine explizite Zuordnung gefunden wurde, wird das Token der "*.*" Zuordnung zurückgeliefert - falls eine solche Zuordnung existiert.
FALSE: Falls keine explizite Zuordnung gefunden wurde wird immer eine Null-Token zurückgeliefert. Die Zuordnung zu *.* wird ignoriert.

Return: GeodeToken der zugehörigen Applikation, oder ein Null-Token, wenn keine zugehörige Applikation gefunden wurde.
Beispiel: Finden des Standard-Browsers (HTML-Betrachter)
DIM AppToken AS GeodeToken
  appToken = GeoRunFindDosApp("*.HTM", FALSE)
  MsgBox appToken.tokenChars + "," + Str$(appToken.manufID)
Hinweis:

  • Um zu prüfen, ob ein Null-Token zurückgeliefert wurde, können Sie die Funktion NullStruct() verwenden.
DIM appToken as GeodeToken
  appToken = GeoRunFindDosApp("MYFILE.DTF", FALSE)
  IF appToken = NullStruct() THEN ....


GeoRunTestRunning

GeoRunTestRunning prüft, ob eine bestimmte Applikation bereits läuft, oder nicht.


Deklaration:

FUNCTION GeoRunTestRunning(token as GeodeToken) as Integer

Parameter:
token: GeodeToken der fraglichen Applikation.

Return: TRUE: Die Applikation läuft bereits.
FALSE: Die Applikation läuft noch nicht.

Warnung! GeoRunTestRunning schließt eine eventuell bestehende Connection zum getesteten Programm.
Diese Warnung ist nur relevant, wenn Sie GeoRunOpenConnection (siehe unten) verwenden.
Beispiel: Prüfen, ob GeoWrite schon läuft
DIM x
DIM AppToken AS GeodeToken

  AppToken.tokenchars = "WP00"
  AppToken.manufid = 0
  x = GeoRunTestRunning(AppToken)
  IF x THEN MsgBox "GeoWrite läuft schon"


GeoRunCloseAppliaction

GeoRunCloseApplication schließt eine laufende GEOS-Applikation. Genauer: sie wird aufgefordert sich zu schließen, genau so, als ob der Nutzer "Beenden" aus dem Datei-Menü gewählt hätte.


Deklaration:

FUNCTION GeoRunCloseApplication(token as GeodeToken) as Integer

Parameter:
token: GeodeToken der zu schließenden Applikation.

Return: TRUE: Die Applikation lief und wurde aufgefordert, sich zu beenden.
FALSE: Die Applikation wurde nicht gefunden (lief nicht).

Warnung! GeoRunCloseApplication schließt eine eventuell bestehende Connection zum Programm.
Diese Warnung ist nur relevant, wenn Sie GeoRunOpenConnection (siehe unten) verwenden.
Beispiel: GeoDraw schließen
DIM AppToken AS GeodeToken

  AppToken.tokenchars = "DP00"
  AppToken.manufid = 0  
  GeoRunCloseApplication(AppToken)

^

2. Fernsteuern anderer Applikationen

Mit den hier bereitgestellten Routinen können Sie eine Verbindung ("Connection") zu anderen GEOS-Programmen herstellen und diesen Befehle senden. Das können R-BASIC Programme oder andere GEOS-Applikationen (z.B. GeoWrite) sein.

GeoRunOpenConnection etabliert eine Connection zu einem anderen Programm. Es liefert einen Word-Wert (ConnectionToken), der von den anderen Routinen benötigt wird.
GeoRunSendMessage sendet einen Text und einen Word-Wert an den OnConnection-Handler eines verbundenen R-BASIC Programms.
GeoRunSendMessageBack sendet einen Text und einen Word-Wert an den OnConnection-Handler des Programms, dass die Verbindung hergestellt hat.
GeoRunSendKbdEvent simuliert einen Tastendruck für das verbundene Programm.
GeoRunCloseConnection schließt eine Verbindung zu einem anderen Programm wieder.

Während die Connection aktiv ist, können Sie mit GeoRunStartApplication oder GeoRunOpenFile (siehe vorn) eine Datendatei an das verbundene Programm senden.

GeoRunOpenConnection

GeoRunOpenConnection etabliert eine Connection zu einem anderen Programm. Dieses Programm wird als Server bezeichnet, während das aktuelle Programm (dass GeoRunOpenConnection aufgerufen hat) der Client ist. Wenn der Server noch nicht läuft, wird er gestartet. Während die Connection besteht, lässt sich der Server nicht beenden.

GeoRunOpenConnection liefert einen Word-Wert (ConnectionToken), der von den anderen Routinen benötigt wird.


Deklaration:

FUNCTION GeoRunOpenConnection(token as GeodeToken, data$ as String(32)) as Integer

Parameter:
token: GeodeToken des Servers.
data$: Name einer Datendatei aus dem aktuellen Ordner. Ein Leerstring (keine Datei) ist zulässig.

Return: ConnectionToken für die Verbindung.

Warnung! Wenden Sie weder GeoRunCloseApplication noch GeoRunTestRunning auf den Server an, solange die Connection besteht!
Diese Routinen schließen die bestehende Verbindung!

GeoRunStartApplication und GeoRunOpenFile hingegen können Sie gefahrlos verwenden.


Hinweise:

  • Falls der Server schon läuft ruft GeoRunOpenConnection den OnConnection-Handler des Servers auf, andernfalls den OnStartup-Handler.

  • Beachten Sie, dass das Öffnen einer Applikation und/oder das Laden eines Dokuments einen Moment dauern kann.

    Falls Sie in dieser Situation direkt nach GeoRunOpenConnection einen Befehl senden, kann folgendes passieren:

    GeoRunSendMessage: der OnConnection-Handler wird vor dem OnStartup-Handler (gerufen von GeoRunOpenConnection) ausgeführt.
    GeoRunSendKbdEvent: der Tastendruck könnte ignoriert werden.

Beispiel: siehe GeoRunSendMessage und GeoRunSendKbdEvent

GeoRunSendMessage

GeoRunSendMessage sendet eine Information an den OnConnection-Handler des Servers. Sie besteht aus einem Text mit bis zu 250 Zeichen, der im Parameter dataFile$ an den Handler übergeben wird und einem Word-Wert, der im Parameter flags an den Handler übergeben wird. Es ist Aufgabe des Servers, die Informationen korrekt zu interpretieren.

GeoRunSendMessage setzt voraus, dass der Server ein R-BASIC Programm ist, dass mit R-BASIC 1.0 oder höher compiliert wurde.


Deklaration:

SUB GeoRunSendMessage(cTok as Word, data$ as String(250), flags as Word)

Parameter
cTok: ConnectionToken, geliefert von GeoRunOpenConnection
data$: beliebiger Text. Wird als Parameter dataFile$ an den OnConnection-Handler übergeben.
flags: beliebiger Word-Wert. Wird als Parameter flags an den OnConnection-Handler übergeben.

Hinweise:

  • Falls Sie mit GeoRunSendMessage eine den Namen einer Datendatei an den OnConnection-Handler übergeben wollen, sollten Sie den kompletten Pfad zu Datei übergeben. Einfacher ist die Verwendung von GeoRunStartApplication oder GeoRunOpenFile für diesen Zweck.

  • Falls Sie sowohl Datendateien als auch andere Kommandos an den Server senden wollen, können Sie Ihre Kommandos mit einem Zeichen beginnen, das nicht Teil eines Dateinamens sein kann, z.B. mit einem Sternchen *. Damit kann der OnConnection-Handler beides sicher unterscheiden. Das der Library beiliegende Beispiel macht davon Gebrauch.
Beispiel: Wir stellen eine Verbindung zu einem anderen Programm (dem Server) her und senden ihm das ConnectionToken. Der Server muss die Message in seinem OnConnection-Handler korrekt interpretieren. Der Code stammt aus dem der Library beiliegende Beispiel.
DIM AppToken AS GeodeToken
DIM globalCTok

  AppToken.tokenchars = "BOOK"   ' Muss zum Server passen
  AppToken.manufid = 5

  ' "*1" sagt dem Server, dass der 3. Parameter das 
  ' ConnectionToken ist
  globalCTok = GeoRunOpenConnection(AppToken, "")
  GeoRunSendMessage(globalCTok, "*1", globalCTok)


GeoRunSendMessageBack

GeoRunSendMessageBack kann vom Server aus gerufen werden und sendet eine Information an den OnConnection-Handler des Clients. Das benötigte ConnectionToken muss dem Server vorher mit GeoRunSendMessage übermittelt worden sein.

Es ist Aufgabe des Clients, die gesendete Informationen korrekt zu interpretieren.


Deklaration:

SUB GeoRunSendMessageBack(cTok as Word, data$ as String(250), flags as Word)

Parameter
cTok: ConnectionToken, geliefert von GeoRunOpenConnection
data$: beliebiger Text. Wird als Parameter dataFile$ an den OnConnection-Handler übergeben.
flags: beliebiger Word-Wert. Wird als Parameter flags an den OnConnection-Handler übergeben.


GeoRunSendKbdEvent

GeoRunSendKbdEvent simuliert einen Tastendruck für den Server. Der Tastendruck wird an das Application-Objekt übergeben und geht von dort direkt an das aktuell "aktive" Objekt.

Die Parameter sind die gleichen, wie bei der Methode KbdEventWithScancode. Dort, in den Kapiteln 14.2 und 14.3 des Handbuchs "Spezielle Themen" (Vol. 3), finden Sie eine ausführliche Beschreibung der Bedeutung der einzelnen Parameter.

GeoRunSendKbdEvent kann mit allen GEOS-Applikationen verwendet werden. Bitte beachten Sie die Hinweise unten.


Deklaration:

SUB GeoRunSendKbdEvent(cTok as Word, character as Word, kexState as Word, keyFlags as Word, scanCode as Word)

Parameter:
cTok: ConnectionToken, geliefert von GeoRunOpenConnection
character: ASCII-Code oder erweiterter ASCII-Code der Taste. Tipp: In der Library "KeyCodes" finden Sie symbolische Konstanten für die erweiterten ASCII-Codes.
keyState: Information, welche Status- oder Steuertasten aktuell gedrückt sind, z.B. KS_LSHIFT für die linke Shift-Taste.
keyFlags: Information, ob der Nutzer die Taste gerade gedrückt hat, sie gedrückt hält oder gerade losgelassen hat, z.B. KF_FIRST_PRESS
scanCode: Der Scancode der gedrückten Taste. Dieser Wert kann Null sein, es sei denn, Sie wollen ein Tastenkürzel wie "Strg-P" aktivieren.

Hinweise:

  • Im Allgemeinen ist es ausreichend, das "FIRST_PRESS" Event zu senden.

  • Menüpunkte, die über eine "Shortcut" Kombination wie Strg-P oder Shift-F4 angesprochen werden, können Sie mit GeoRunSendKbdEvent aktivieren.

  • Menüs oder Menüpunkte, die über die normale Tastaturnavigation, z.B. Alt-d, angesprochen werden, können Sie mit GeoRunSendKbdEvent nicht aktivieren.
Beispiel: Wir stellen eine Verbindung zu GeoWrite her und senden das Wort "Hallo" an das aktuelle Dokument. Dann öffnen wir den Drucken-Dialog (Strg-P). Für diesen Zweck benötigen wir den Scancode des Buchstaben P. Am Ende des Kapitels 14.3 im Handbuch "Spezielle Themen" finden wir dafür den Wert 25.
DIM cTok
DIM AppToken AS GeodeToken

  AppToken.tokenchars = "WP00"
  AppToken.manufid = 0

  cTok = GeoRunOpenConnection(AppToken, "")

  GeoRunSendKbdEvent(cTok, Asc("H"), 0, KF_FIRST_PRESS, 0)
  GeoRunSendKbdEvent(cTok, Asc("a"), 0, KF_FIRST_PRESS, 0)
  GeoRunSendKbdEvent(cTok, Asc("l"), 0, KF_FIRST_PRESS, 0)
  GeoRunSendKbdEvent(cTok, Asc("l"), 0, KF_FIRST_PRESS, 0)
  GeoRunSendKbdEvent(cTok, Asc("o"), 0, KF_FIRST_PRESS, 0)

  GeoRunSendKbdEvent(cTok, Asc("p"), KS_LCTRL, KF_FIRST_PRESS, 25)

  GeoRunCloseConnection(cTok)


GeoRunCloseConnection

GeoRunCloseConnection schließt eine mit GeoRunOpenConnection hergestellte Verbindung.


Deklaration

SUB GeoRunCloseConnection(cTok as Word)

Parameter:
cTok: ConnectionToken, geliefert von GeoRunOpenConnection

^

Weiter...