Plugins für Nettalk erstellen

Nettalkplugins sind einfache Win32-Anwendugnen. Die Kommunikation läuft über Fensternachrichten ab.

Zum C++ Plugin-Tutorial

Konstanten

WM_SETTEXT = 12
PLUGIN_NAME = "Testplugin" 'Name des Plugins mit dem es sich bei Nettalk meldet

Variablen

hNetWhd 'Fensterhandel des Kommunikationsfensters von Nettalk
hPlgWhd 'Fensterhandel des eignenden Kommunikationsfensters

Windows-APIs

SendMessage
GetCommandLine

Plugin laden

Nettalk startet das Plugin und übergibt dabei als Parameter das Fensterhandel seines Kommunikationsfensters. Das Plugin muss nun selber ein Fenster erstellen um Nachrichten von Nettalk erhalten zu können. Der Handel des erstellten Fensters wird einer Variable (hPlgWhd) zugewiesen.

Kommunikation vorbereiten

Das Plugin liest den Parameter mit GetCommandLine aus, dafür werden nur die Zeichen nach dem letzten Leerzeichen benötig. Diese Zeichenkette enthält nun die Fensterhandel, die in eine Zahlenvariable (hNetWhd) konvertiert werden sollte. Um besser Testen zu können macht es durchaus Sinn diesen Schritt während des Testens durch eine direkte feste Zuweisung der Variable hNetWhd zu ersetzen. Den nötigen Wert der Handel kann in Nettalk mittels ?DataPort ermittelt werden.

Anmelden

Nun stellt sich das Plugin bei Nettalk vor indem es Seinen Namen und seine Fensterhandel (hPlgWhd) an Nettalk sendet.

SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " inst " + NumberToText(hPlgWhd)

Dieser Vorgang kann alternativ auch über DDE erfolgen, dies macht vor allem Sinn wenn es sich nicht um ein Plugin im eigentlichen Sinne, sondern um ein eigenes Programm handelt, das mit Nettalk Kommunizieren soll. (Der Servername ist „Nettalk“ und das Topic „MainWindow“. Es kann sowohl XTYP_EXECUTE wie auch XTYP_POKE verwendet werden.)

HINWEIS: PLUGIN_NAME darf KEINE LEERZEICHEN enthalten!

Events registrieren

Jetzt, aber auch zu jedem Späteren Zeitpunkt, können Events registriert werden die von Nettalk an das Plugin gesendet werden sollen.

Beispiel:
SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " addevent Chan_Msg"
SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " addevent Serv_Query"
SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " addevent FrameChange"

Eine Vollständige Liste aller Events ist in Nettalk unter Script > Bearbeiten > Ereignisse: zu finden. Eine Sonderstellung haben die Folgenden Events, sie müssen nicht erst registriert werden:

Unload: Das Plugin soll beendet werden, z.B. Weil Nettalk beendet wird. Dieses Events sollte auf jeden Fall beachtet werden.

Show: Es soll der Optionsdialog des Plugins, wenn vorhanden, angezeigt werden.

Return/Returnerror: Antwort auf eine Anfrage die mit dem Befehl request gestellt wurde.

Events empfangen

Die auftretenden Events werden auf die gleiche Weise wie das Plugin sendet, von Nettalk an das Plugin gesendet. Der Aufbau der Nachricht ist folgender Maßen: Eventname, ein Lehrzeichen (Byte mit dem Wert 32, in Hex 20), dann alle Argumente, voneinander abgetrennt durch ein Byte mit dem Wert 27 (in Hex 1B).

Hinweis: Wenn die Window-Message WM_SETTEXT eigenständig Verarbeitet wird (z.B. über eine Nachrichtenschleife) muss unbegingt darauf geachtet werden, dass als Anwort der Wert -1 zurückgegeben wird! Wird dies nicht getan geht Nettalk davon aus, dass das Plugin nicht mehr korrekt arbeitet und senden dann auch keine Botschaften mehr (auch keinen unload Befehl)!!

Pluginbefehle

Neben addevent und inst gibt es noch folgende Befehle die die von Nettalk direkt verarbeitet werden:

RemEvent: Löscht die Registrierung eines mit AddEvent eingetragenen Events.

SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " remevent Chan_Msg"

Unload: Sagt Nettalk das das Plugin nun beendet wird, dieser Befehl sollte immer an Nettalk gesendet werden wenn das Plugin beendet wird.

SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " unload"

Send: Löst in Nettalk das Scriptevent PluginEvent aus.

SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " send Hallo Script ich bin ein Plugin!"

Request: Sendet einen Ausdruck an Nettalk. Der Rückgabewert kommt über Return. Wenn ein Fehler dabei aufgetreten ist wird an stelle von Return Returnerror ausgelöst.

SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " request 5+6*2+sin(pi+5)"
SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " request GetCaption(FrontFrameID)"

(Weiter Informationen zu Request erhalten Sie auf der Seite Scriptereignisse bei den Funktionen Return und ReturnError)

Eine Übersicht der Funktionen ist unter Scriptfunktionen zu Finden („Funktionen“, „Funktionen ohne Argumente“ und „Konstanten“ können verwendet werden.).

Um das Script vom Plugin aus zu Steuern gibt es noch die Funktionen scriptstop, scriptstart, getscripttext, setscripttext und errordone.

Da mittels request nur Funktionen im eigentlichen Sinne, also mit Rückgabewert verwendet werden können, kommt man leider für viele Sachen, z.B. Textausgabe bisher in Nettalk nicht ohne ein kurzes zusätzliches Script aus.

SendCom: Sendet einen Text an Nettalk. Der Text wird wie eine Eingabe vom Benutzer behandelt und z.B. gesendet oder wenn es mit einem / anfaengt als Befehl ausgefuehrt. Zu beachten ist, das zwischen „SendCom“ und der Benutzereingabe die FrameID des Fensters immer angegeben werden muss, in dem die Eingabe ausgeführt werden soll. Die FrameID kann in Nettalk fuer das aktuelle Fenster testweise ermittelt werden mit

?FrontFrameID

SendMessage hNetWhd, WM_SETTEXT, -1, PLUGIN_NAME + " sendcom 2 /echo Hallo Welt"

Eigene Werkzeuge