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.

 

FARBE

 Ändert die Farbpalette für diese Konsole. Take Command liest die Farbpalette der Konsole und stellt seine eigene Palette entsprechend ein.

 

DETACH

 Entfernt dieses Konsolenfenster (dessen PID ein dezimaler String in pszArgumentsist ) von Take Command.

 

FLASH

 Flasht das Registerkartenfenster. Die Anzahl und der Typ werden in pszArguments im gleichen Format wie im  WINDOW-Befehlübergeben .

 

FONT

 Ändertdie Schriftart für dieses Tabulatorfenster. pszArguments ist eine (durch Leerzeichen getrennte) Zeichenkette; siehe TCFONT für die Syntax.

 

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.

 

RECORDER

 Steuert den Makro-Recorder. pszArguments sollte auf die Befehlszeile zeigen, die an RECORDER übergeben wird .

 

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 .

 

TCLISTVIEW

 Liefertin pszArguments eine durch Leerzeichen getrennte Liste der im Explorer-Listenansicht-Steuerelement ausgewählten Dateien.

 

TCTABACTIVE

 Gibt 1 zurück, wenn die aktuelle Registerkarte aktiv ist.

 

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.

 

TCTABVISIBLE

 Gibt 1 zurück, wenn die aktuelle Registerkarte sichtbar ist.

 

TRANS

 Setzt Take Command Fenster-Transparenz auf den String-Wert (0-100) in pszArguments.

 

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

 

WSHELL

 Wechselt das Take Command Arbeitsverzeichnis in das in pszArguments angegebene Shell-Verzeichnis .

 

WSHORTCUT

 Wechseltzu dem inpszArgumentsangegebenen Namen der Explorer-Verknüpfung .

 

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 CommandLPCTSTR Argumentint IndexLPCTSTR 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