Inhaltsverzeichnis
Plugins für Nettalk erstellen
Nettalkplugins sind einfache Win32-Anwendugnen. Die Kommunikation läuft über Fensternachrichten ab.
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"
Sie befinden sich hier: start » nettalk » scripting » makeplugins