Hiermit stelle ich den Sourcecode für das TS3-Client-Plugin System rein.
Es ist der kompatible Code für die Plugin-Version 16.
Hier ein Beispiel, wie soeine Projekt-Datei ausehen könnte.
- Update Plugin API zu Version 17
+ ts3_functions : Neue Plugin Funktionen : getClientDisplayName, getBookmarkList, getProfileList, guiConnect, guiConnectBookmark, createBookmark.
+ plugin_definitions : Neue Type für neue Plugin funktionen hinzugefügt.
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
Informationen als PChar- oder ShortString-Parameter übergeben. }
function ts3plugin_name() : PAnsiChar; cdecl; begin //Der Name des Plugins
Result := 'Mein erstes Plugin'; end;
function ts3plugin_version() : PAnsiChar; cdecl; begin //Ein Versionsstring, von deinem Plugin.
Result := '1.2'; end;
function ts3plugin_apiVersion() : Integer; cdecl; begin //Nur oben Konstante ändern; NICHT HIER ÄNDER!
Result := PLUGIN_API_VERSION; end;
function ts3plugin_author() : PAnsiChar; cdecl; begin //Der Authorname.
Result := 'NickelM'; end;
function ts3plugin_description() : PAnsiChar; cdecl; begin //Beschreibung des Plugins, falls du mehrer Zeilen haben willst, musst du //das denk ich mal so machen
Result := PAnsiChar('Testplugin' + sLineBreak + 'Zweite Zeile des Plugins'); end;
procedure ts3plugin_setFunctionPointers(funcs : TS3Functions); cdecl; begin //Wichtigste Funktion. Am besten nichts ändern
ts3Func := funcs; end;
function ts3plugin_init() : Integer; cdecl; begin //Gebe hier den Code an, der beim Initalisieren der DLL ausgeführt wird. //Gib 0 zurück bei Erfolgreich. //Gib 1 zurück bei Fehlschlag.
Result := 0; end;
procedure ts3plugin_shutdown(); cdecl; begin //Hier dein Code beim end;
//Ab hier kommen die Funktionen, die in der Plugin.pas deklariert sind. //Einfach aus der Plugin.pas hierhin kopieren und unten bei "exports" den //Funktionsname einfügen. function ts3plugin_onTextMessageEvent(serverConnectionHandlerID : uint64;
targetMode : anyID; toID : anyID; fromID : anyID; fromName : PAnsiChar;
fromUniqueIdentifier: PAnsiChar; message: PAnsiChar; ffIgnored : Integer) : Integer; cdecl; var myID : anyID;
toUI : PAnsiChar; begin //Falls der TS3 Client die Message sowieso ignoriert. if Boolean(ffIgnored) then begin
Result := 0; //Client will ignore the message anyways, so return value here doesn't matter */
Exit; end; //Ab hier kommt ein Beispiel-Code //TargetMode ist die Msg-Art : //1 = PrivateMsg; Die anderen werden ServerMsg und ChannelMsg sein. //Was für ein Wert die haben, habe ich noch nicht getestet. if targetMode = 1 then begin //serverConnectionHandlerID ist sozusagen der der "Tab-Handle" zum Server. //Es ist sozusagen ein Handle zur Verbindung.
//Eigene ID abrufen.
ts3Func.getClientID(serverConnectionHandlerID, @myID); //Falls die FromID, also wovon die Msg kommt, ungleich der eigenen ist, //man will denk ich mal die eigenen Msg nicht wirklich überprüfen. if (fromID <> myID) then begin //Hier ein Code. end; end; //Wenn du fertig bist, oder auch zwischendurch, setze des Result //auf 0, das sie vom Client normal angezeigt, bzw. normal behandelt wird, also //falls du sagt, trotz deines Codes, soll der Client normal mit der Msg umgehen. //Bei 1 sagst du dem Client, er soll die Msg ignorieren, also nicht anzeigen.
Result := 0; end;
exports //GANZ WICHTIG, ALLE FUNKTIONSNAMEN VON DEN PLUGIN-FUNKTIONEN HIER //HINZUFÜGEN. //Diese müssen aufjedenfall, in jedem Plugin sein...
ts3plugin_name, //<--
ts3plugin_version, //<--
ts3plugin_apiVersion,//<--
ts3plugin_author, //<--
ts3plugin_description,//<--
ts3plugin_setFunctionPointers,//<--
ts3plugin_init, //<--
ts3plugin_shutdown, //<-- //Ab hier kannst du die anderen Funktionen hinzufügen. //Dies sind sogenannte Callback-Funktionen, also Events, //die vom TS3-Client gesendet werden.
ts3plugin_onTextMessageEvent;
begin
end.
Im Anhang, die Rar-Datei mit allen Units, inklusive ein Bild, wie das Beispielplugin in TS3 angezeigt wird.
Wenn ihr fertig seit, geht ihr in Delphi auf Projekt->"Projektname" erzeugen.
Damit bekommt ihr eine DLL, die ihr dan ins TS3-Client Verzeichniss in den Ordner "plugins" kopiert.
Fertig. Der Code ist für eine 32bit DLL getestet worden, für einen 32bit TS3-Client. Ob dies für einen 64bit TS3-Client geht, weis ich nicht, da ich kein Delphi XE2, sowie kein 64bit Windows habe .
Viel Spass damit.
Gruß NickelM
Nickel "Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.