TCC Plugins sind vom Benutzer geschriebene DLLs, die es Ihnen ermöglichen, Ihre eigenen internen Variablen, Variablenfunktionen und internen Befehle zu schreiben und TCC sie beim Start laden. Plugin-Namen überschreiben bestehende Namen, so dass Sie interne Variablen und Befehle erweitern und/oder ersetzen können. Wenn TCC startet, lädt es automatisch alle Plugins im Standardverzeichnis (dem Unterverzeichnis PLUGINS\ im TCC Installationsverzeichnis). Die Plugins werden geladen, bevor die Startdatei (TCSTART) ausgeführt wird.
Sie können ein bestimmtes auszuführendes Plugin angeben, indem Sie dem Funktions-/Variablennamen/Befehlsnamen den Plugin-Namen und ein $ voranstellen, zum Beispiel:
echo %_myplugin$variable
echo %@myplugin$func[abc]
myplugin$mycommand
Plugins können in jeder Sprache geschrieben werden, die eine Windows-DLL erstellen kann. Das TCC Plugin-SDK enthält Beispiele für Visual C++ und Delphi. Das SDK ist auf unserer Website unter https://jpsoft.com/downloads/sdk/sdk.zip verfügbar .
Tastatureingabe-Plugins:
Sie können auch Keystroke-Plugins schreiben, die bei jeder Tasteneingabe in der Befehlszeile aufgerufen werden. Ein Keystroke-Plugin kann Aktionen ausführen, wenn eine bestimmte Taste eingegeben wird, oder sogar die Taste ändern, bevor sie an den Befehlsprozessor zurückgegeben wird. Tastendruck-Plugins werden nach Tasten-Aliasen aufgerufen und bevor TCC sucht nach der Standardaktion für diese Taste.
Nur V24+: Wenn der in "nKey" übergebene Wert 0 ist, ist die Taste kein gültiges Unicode-Zeichen, und das Plugin muss den pszKey-String analysieren, um den Namen zu erhalten. Der Name wird im Format übergeben:
[Ctrl-][Alt-][Shift-]key
Zum Beispiel:
F12
Strg-F1
Strg-Alt-Links
Strg-Umschalt-F5
Das Tastendruck-Plugin kann den nKey- oder pszKey-Wert ändern und ihn zurück an TCC zurückgeben, um die Standardaktion für den (neuen) Wert zu ermitteln. Wenn nKey!= 0 ist, TCC wird es wie ein normales Unicode-Zeichen behandelt. Wenn nKey = 0, TCC wird pszKey auf einen gültigen Schlüsselnamen geprüft.
Wenn das Plugin den Schlüssel behandelt und nichts weiter tun will TCC mehr tun will, setzt es nKey auf 0 und pszKey auf einen leeren String (schreibt eine Null in das erste Byte).
Plugin-Syntax:
// PluginInfo structure - returned by plugin in response to GetPluginInfo() call from command processor
// Note that the strings should all be Unicode; if your PlugIn is compiled for ASCII you'll need to use
// the MultiByteToWideChar API to convert the strings before passing them back to TCC
typedef struct {
TCHAR *pszDll; // name of the DLL
TCHAR *pszAuthor; // author's name
TCHAR *pszEmail; // author's email
TCHAR *pszWWW; // author's web page
TCHAR *pszDescription; // (brief) description of plugin
TCHAR *pszFunctions; // comma-delimited list of functions in the
// plugin (leading _ for internal vars, @ for
// var funcs, * for keystroke function,
// otherwise it's a command)
int nMajor; // plugin's major version #
int nMinor; // plugin's minor version #
int nBuild; // plugin's build #
HMODULE hModule; // module handle
TCHAR *pszModule; // module name
} PLUGININFO, *LPPLUGININFO;
// structure passed to plugin functions to monitor keystrokes. A
// keystroke function can be named anything, but must prefix a
// * to its name in the function list (pszFunctions, above).
// If the keystroke plugin handled the keystroke and doesn't want
// to pass it back to TCC, it should set nKey = 0 and pszKey to an empty string.
// The command processor will call the keystroke function with all
// parameters set to 0 just before accepting input for each new
// command line.
// The string pointers are Unicode
typedef struct {
int nKey; // key entered
int nHomeRow; // start row
int nHomeColumn; // start column
int nRow; // current row in window
int nColumn; // current column in window
LPTSTR pszLine; // command line
LPTSTR pszCurrent; // pointer to position in line
int fRedraw; // if != 0, redraw the line
LPTSTR pszKey; // (v24+ only) ASCII name of key (for example, "Ctrl-Alt-Home")
} KEYINFO, *LPKEYINFO;
__declspec(dllexport) BOOL WINAPI InitializePlugin( void ); // called by command processor after loading all plugins
__declspec(dllexport) LPPLUGININFO WINAPI GetPluginInfo( HMODULE hModule ); // called by command processor to get information from plugin, primarily for the names of functions & commands
__declspec(dllexport) BOOL WINAPI ShutdownPlugin( BOOL bEndProcess ); // called by command processor when shutting down
// if bEndProcess = 0, only the plugin is being closed
// if bEndProcess = 1, the command processor is shutting down
Die in "pszFunctions" aufgeführten Funktionen, die von TCC aufgerufen werden, müssen das folgende Format haben:
DLLExports INT WINAPI MyFunctionName( LPTSTR pszArguments );
Interne Variablennamen in pszFunctions (und ihre entsprechenden Funktionen) müssen mit einem Unterstrich ('_') beginnen.
Variable Funktionsnamen in pszFunctions müssen mit einem @ beginnen; der entsprechenden Funktion muss ein "f_" vorangestellt werden. (Dadurch können variable Funktionen denselben Namen wie interne Befehle haben.)
Zum Beispiel:
pszFunctions = "reverse,@reverse"
Die Eingabe des Namens "reverse" in der Befehlszeile ruft den Befehl reverse() auf
Die Eingabe des Namens "@reverse[]" in die Befehlszeile ruft die Variablenfunktion f_reverse() auf.
Die Namen von Variablenfunktionen sind auf maximal 31 Zeichen begrenzt.
Interne Befehlsnamen sind eine beliebige Kombination von alphanumerischen Zeichen (maximal 12 Zeichen).
Aufrufen des PlugIns:
Für interne Variablen ist pszArguments leer (nur für die Ausgabe)
Bei Variablenfunktionen übergibt pszArguments das/die Argument(e) an die Plugin-Funktion
Bei internen Befehlen ist pszArguments die Kommandozeile minus den Namen des internen Befehls
Rückgabe aus dem PlugIn:
Für interne Variablen und Variablenfunktionen kopieren Sie den Ergebnisstring über pszArguments. Die maximale Stringlänge für interne Variablen und Variablenfunktionen beträgt 32K (32767 Zeichen + abschließendes Nullzeichen).
Interne Variablen haben keinen sinnvollen Integer-Rückgabewert. Bei variablen Funktionen kann der Integer-Rückgabewert sein:
0 = Erfolg
< 0 = Fehlschlag; Fehlermeldung wird bereits von der PlugIn-Funktion angezeigt
> 0 = Fehlschlag; Fehlerwert sollte als Systemfehler interpretiert werden und
von 4NT / TC angezeigt werden
Es gibt einen speziellen Rückgabewert (0xFEDCBA98), der dem Parser mitteilt, dass das Plugin beschlossen hat, die Variable/Funktion/Befehl nicht zu behandeln. Der Parser fährt dann mit der Suche nach einer passenden internen und dann externen Variable fort. Beachten Sie, dass Sie diesen Rückgabewert verwenden können, um Ihr Plugin die Befehlszeile ändern zu lassen und sie dann an eine bestehende interne Variable/Funktion/Befehl weiterzugeben!
Bei internen Befehlen wird das ganzzahlige Ergebnis zurückgegeben (alles, was in pszArgument steht, wird ignoriert)
Behandlung von Ausnahmen:
TCC fängt alle Ausnahmen ab, die im Plugin auftreten, um zu verhindern, dass das Plugin den Befehlsprozessor abstürzen lässt. Es wird eine Fehlermeldung angezeigt und das Plugin gibt einen Exit-Code = 2 zurück.
Take Command Schnittstelle:
Es wurden einige neue API-Funktionen zur Manipulation der Verzeichnis- und Befehlshistorie hinzugefügt:
DirHistoryStart(void) - gibt einen Zeiger auf den Anfang der Verzeichnis-History zurück
HistoryStart(void) - gibt einen Zeiger auf den Beginn der Befehlshistorie zurück
DeleteFromHistory( LPTSTR lpszLine ) - löscht die Zeile aus der Befehlshistorie (es handelt sich um einen Zeiger auf die zu löschende Zeile, nicht auf eine zu vergleichende Zeile!)
Wenn der Benutzer versucht, die Online-Hilfe mit HELP, F1 oder Ctrl-F1 anzuzeigen, sucht TCC nach einer Plugin-Variablen, einer Variablenfunktion oder einem Befehl, und wenn der Name übereinstimmt, wird eine "Hilfe"-Funktion im Plugin gesucht, geladen und ausgeführt. Das Plugin ist für die Anzeige seiner eigenen Hilfe verantwortlich. Die "Hilfe"-Funktion sollte NICHT in der kommagetrennten Funktionsliste des Plugins in pszFunctions erscheinen. Help sollte 1 zurückgeben, wenn es Hilfe anzeigt (oder wenn es nicht möchte, dass TCC versucht, Hilfe zu diesem Thema anzuzeigen). Die Syntax der Help-Funktion im Plugin sollte sein:
Help( LPTSTR pszName );
Wenn Take Command einen Verwendungstext anzeigen möchte, wird TCC nach einem Plugin-Befehl suchen und, wenn der Name übereinstimmt, eine "Usage"-Funktion im Plugin suchen, laden und ausführen. Das Plugin ist für die Anzeige seiner eigenen Hilfe verantwortlich. Die "Usage"-Funktion sollte NICHT in der kommagetrennten Funktionsliste des Plugins in pszFunctions erscheinen. Das Plugin sollte einen mehrzeiligen String zurückgeben, der die Befehlssyntax enthält. Die erste Zeile (mit einem "\r" abgeschlossen) wird in der Statusleiste von Take Command angezeigt. Die gesamte Zeichenkette wird als Tooltip-Popup angezeigt, wenn der Mauszeiger über die Meldung in der Statusleiste bewegt wird. Usage sollte 1 zurückgeben, wenn es etwas in pszUsage geschrieben hat (oder wenn es nicht will, dass TCC versucht, einen Usage-String anzuzeigen). Die Syntax der Usage-Funktion im Plugin sollte lauten:
Usage( LPTSTR pszName, LPTSTR pszUsage );
Mit der Funktion TakeCommandIPC können Plugins mit der kontrollierenden Instanz Take Command kommunizieren. Die Syntax lautet:
__declspec(dllexport) int TakeCommandIPC( LPTSTR pszCommand, LPTSTR pszArguments );
Die unterstützten Befehle sind:
ACTIVATE
Aktiviert das Fenster, dessen Handle (als Dezimalstring) in pszArgumentssteht .
CDD
Wechselt denaktuellen Ordner im Datei-Explorer auf den Verzeichnisnamen in pszArguments.
HILFE
Zeigt die Hilfe Take Command für das Thema in pszArguments an.
HWND
Gibt das Take Command Fensterhandle in pszArgumentszurück .
HVIEW
Gibtdas Handle des aktiven Tab-Fensters in pszArguments zurück.
SHORTCUT
Gibt den Namen der Verknüpfung, die Take Command gestartet hat , inpszArgumentszurück .
SELECTED
Gibt den aktuell ausgewählten Text in pszArguments zurück.
START
Hängt ein verstecktes Konsolenfenster an, dessen Hex-PID (als String) in pszArgumentssteht .
STARTNA
Hängt ein verstecktesKonsolenfenster an, dessen hex PID (als String) in pszArguments steht, aber macht es nicht aktiv.
STATUSBAR
Zeigtdie Meldung in pszArguments in der Statusleistean .
TCTOOLBAR
Aktualisiert die Symbolleiste der Registerkarte Take Command mit der Befehlszeile TCTOOLBAR in pszArguments.
TCFILTER
Gibt den ausgewählten Filter im Datei-Explorer-Fenster in pszArgumentszurück .
TCFILTER_CMD
Setzt den ausgewählten Filter im Datei-Explorer-Fenster auf den Wert in pszArguments.
TCFOLDER
Gibt den ausgewählten Ordner im Folders Tree Control in pszArgumentszurück .
TCTAB
Gibt1 zurück, wenn die Prozess-ID in pszArguments in einem TC-Fenster läuft
TCTABS
Gibt die Anzahl der Take Command Registerkartenfenster zurück.
USAGE
Zeigtdie Verwendungsnachricht in pszArguments in der Statusleistean . Die erste Zeile (bis zum ersten CR) wird in der
Statusleiste angezeigt; der Rest wird im Tooltip angezeigt, wenn Sie den Mauszeiger über die Statusleiste bewegen.
FENSTER
Hat eine Anzahl von Argumenten (angegeben als String in pszArguments), um das Fenster Take Command zu steuern:
MAX
MIN
HIDE
RES
TRAY
TRANS=n
FLASH=n
DETACH n (wobei n die PID des zu trennenden Prozesses ist)
TOPMOST
NOTOPMOST
TOP
BOTTOM
Vervollständigung von Dateinamen
Wenn TCC eine Dateinamensvervollständigung ("tab") durchführt, sucht es nach einer Plugin-Funktion namens TABCOMPLETION. Wie bei den TABCOMPLETE-Skripten können Sie mit TABCOMPLETION Plugin-Funktionen erstellen, um die Dateinamensvervollständigung von TCC anzupassen. Die Syntax lautet:
INT WINAPI TABCOMPLETION(LPCTSTR Command, LPCTSTR Argument, int Index, LPCTSTR CommandLine);
Command - der Name des Befehls am Anfang der Befehlszeile
Argument - das aktuelle Argument, das ausgewertet wird
Index - der Offset in der Befehlszeile vom Anfang von Argument
CommandLine - die gesamte Befehlszeile (in doppelten Anführungszeichen)
Wenn die Plugin-Funktion beendet ist, sollte sie 0 zurückgeben, wenn sie die Vervollständigung verarbeitet hat, und das/die Ergebnis(se) in der Umgebungsvariablen TABCOMPLETIONRESULT speichern. Wenn die Funktion mehrere Vervollständigungsergebnisse hat, sollten sie zu TABCOMPLETIONRESULT hinzugefügt werden, getrennt durch ein Leerzeichen (und in Anführungszeichen, wenn sie Leerzeichen enthalten).
TCC untersucht den Inhalt von TABCOMPLETIONRESULT; wenn er einen einzelnen Wert enthält, fügt TCC diesen an der Vervollständigungsstelle in der Befehlszeile ein. Wenn es mehrere Rückgabewerte gibt, zeigt TCC ein Popup-Fenster zur Auswahl an (wie das F7-Vervollständigungsfenster).
TCC versucht zunächst, ein Skript zur Vervollständigung des Dateinamens zu finden; wenn keines davon die gewünschte Vervollständigung durchführt, sucht TCC nach der Plugin-Funktion.
Sie können ein bestimmtes Plugin angeben, indem Sie dem Funktions-/Variablennamen/Befehlsnamen den Plugin-Namen und ein $ voranstellen. Zum Beispiel:
echo %_myplugin$variable
echo %@myplugin$func[abc]
myplugin$mycommand