TCC Lesplugins sont des DLL écrites par l'utilisateur qui vous permettent d'écrire vos propres variables internes, fonctions variables et commandes internes, et de les faire charger au démarrage. TCC les charge au démarrage. Les noms des plugins remplacent les noms existants, ce qui vous permet d'étendre et/ou de remplacer les variables et les commandes internes. Au démarrage de TCC démarre, il charge automatiquement tous les plugins présents dans le répertoire par défaut (le sous-répertoire PLUGINS\ dans le répertoire d'installation de TCC). Les plugins seront chargés avant que le fichier de démarrage (TCSTART) ne soit exécuté.

 

Vous pouvez spécifier un plugin particulier à exécuter en préfixant le nom de la fonction / variable / commande avec le nom du plugin et un $. Par exemple :

 

echo %_myplugin$variable

echo %@myplugin$func[abc]

monplugin$mycommande

 

Les plugins peuvent être écrits dans n'importe quel langage capable de créer une DLL Windows. Le TCC plugin SDK contient des exemples pour Visual C++ et Delphi. Le SDK est disponible sur notre site web à l'adresse  https://jpsoft.com/downloads/sdk/sdk.zip.

 

Plugins de touches :

 

Vous pouvez également écrire des plugins de frappe qui seront appelés pour chaque frappe effectuée sur la ligne de commande. Un plugin de frappe peut effectuer des actions lorsqu'une touche spécifique est saisie, ou même modifier la touche avant de la renvoyer au processeur de commande. Les greffons de frappe sont appelés après les alias de touche, et avant la recherche de l'action par défaut pour cette touche. TCC recherche l'action par défaut pour cette touche.

 

V24+ uniquement : Si la valeur passée dans "nKey" est 0, la touche n'est pas un caractère Unicode valide, et le plugin doit analyser la chaîne pszKey pour obtenir le nom. Le nom sera transmis dans le format suivant : [Ctrl-][Alt-] :

 

[Ctrl-][Alt-][Shift-]key

 

Par exemple : [Ctrl-][Alt-][Shift-]key

 

F12

Ctrl-F1

Ctrl-Alt-Gauche

Ctrl-Maj-F5

 

Le plugin de frappe peut modifier la valeur nKey ou pszKey et la renvoyer à TCC pour évaluer l'action par défaut pour la (nouvelle) valeur. Si nKey est != 0, TCC le traitera comme un caractère Unicode normal. Si nKey = 0, TCC évaluera pszKey pour un nom de clé valide.

 

Si le plugin a géré la clé et ne veut rien faire d'autre TCC rien faire de plus, mettre nKey à 0 et pszKey à une chaîne vide (écrire un null sur le premier octet).

 

Syntaxe du plugin :

 

// Structure PluginInfo - renvoyée par le plugin en réponse à l'appel GetPluginInfo() du processeur de commande

// Les chaînes de caractères doivent toutes être Unicode ; si votre plugin est compilé pour l'ASCII, vous devrez utiliser

// l'API MultiByteToWideChar pour convertir les chaînes avant de les renvoyer à l'API MultiByteToWideChar. TCC

typedef struct {

 TCHAR         *pszDll;        // nom de la DLL

 TCHAR         *pszAuthor;        // nom de l'auteur

 TCHAR         *pszEmail;        // email de l'auteur

 TCHAR         *pszWWW;        // page web de l'auteur

 TCHAR         *pszDescription;        // description (brève) du plugin

 TCHAR         *pszFunctions;        // liste des fonctions du plugin, délimitée par des virgules (en tête _ pour les fonctions internes).

                 // (en commençant par _ pour les variables internes, @ pour les fonctions de

                 // pour les fonctions de var, * pour les fonctions de frappe,

                 // sinon, il s'agit d'une commande)

 int         nMajor;        // numéro de version majeure du plugin

 int         nMinor;        // version mineure du plugin #

 int         nBuild;        // build du plugin #

 HMODULE         hModule;        // poignée du module

 TCHAR         *pszModule;        // nom du module

} PLUGININFO, *LPPLUGININFO ;

 

 

// structure transmise aux fonctions du plugin pour surveiller les frappes au clavier. A

// fonction de frappe peut porter n'importe quel nom, mais doit être précédée d'un

* à son nom dans la liste des fonctions (pszFunctions, ci-dessus).

Si le plugin de frappe a géré la frappe et ne souhaite pas la // renvoyer à .

// la transmettre à TCC, il doit définir nKey = 0 et pszKey à une chaîne vide.

// Le processeur de commande appellera la fonction de frappe avec tous les paramètres à 0 juste avant d'accepter la commande.

// paramètres à 0 juste avant d'accepter l'entrée de chaque nouvelle ligne de commande.

// ligne de commande.

// Les pointeurs de chaîne sont Unicode

typedef struct {

 int         nKey;        // touche saisie

 int         nHomeRow;        // ligne de départ

 int         nHomeColumn;        // colonne de départ

 int         nRow;        // ligne actuelle dans la fenêtre

 int         nColumn;        // colonne actuelle dans la fenêtre

 LPTSTR        pszLine ;        // ligne de commande

 LPTSTR        pszCurrent ;        // pointeur sur la position dans la ligne

 int         fRedraw;        // si != 0, redessine la ligne

 LPTSTR        pszKey ;        // (v24+ uniquement) nom ASCII de la touche (par exemple, "Ctrl-Alt-Home")

} KEYINFO, *LPKEYINFO ;

 

__declspec(dllexport) BOOL WINAPI InitializePlugin( void ) ;        // appelé par le processeur de commande après le chargement de tous les plugins

__declspec(dllexport) LPPLUGININFO WINAPI GetPluginInfo( HMODULE hModule ) ;        // appelé par le processeur de commande pour obtenir des informations du plugin, principalement pour les noms des fonctions et des commandes

__declspec(dllexport) BOOL WINAPI ShutdownPlugin( BOOL bEndProcess ) ;        // appelé par le processeur de commande lors de l'arrêt du plugin

 // si bEndProcess = 0, seul le plugin est fermé

 // si bEndProcess = 1, le processeur de commande se ferme

 

Les fonctions énumérées dans "pszFunctions" et appelées par TCC doivent être au format :

 

DLLExports INT WINAPI MyFunctionName( LPTSTR pszArguments ) ;

 

Les noms de variables internes dans pszFunctions (et leurs fonctions correspondantes) doivent commencer par un trait de soulignement ('_').

 

Les noms des fonctions variables dans pszFunctions doivent commencer par un @ ; la fonction correspondante doit être préfixée par "f_" (cela permet aux fonctions variables d'avoir le même nom que les commandes internes).

 

Par exemple :

 

 pszFunctions = "reverse,@reverse"

 

 La saisie du nom "reverse" sur la ligne de commande invoquera la commande reverse()

 La saisie du nom "@reverse[]" sur la ligne de commande invoquera la fonction variable f_reverse().

 

Les noms de fonctions variables sont limités à un maximum de 31 caractères.

 

Les noms des commandes internes sont des combinaisons de caractères alphanumériques (12 caractères au maximum).

 

Appel du plug-in :

 

Pour les variables internes, pszArguments est vide (pour la sortie uniquement).

 

Pour les fonctions variables, pszArguments transmet le(s) argument(s) à la fonction du plugin.

 

Pour les commandes internes, pszArguments est la ligne de commande moins le nom de la commande interne.

 

Retour du plugin :

 

Pour les variables internes et les fonctions variables, copier la chaîne de résultat sur pszArguments. La longueur maximale de la chaîne pour les variables internes et les fonctions variables est de 32K (32767 caractères + le caractère de fin de chaîne nul).

 

Les variables internes n'ont pas de valeur de retour entière significative. Pour les fonctions variables, la valeur de retour peut être un nombre entier :

 

 0 = succès

 < 0 = échec ; le message d'erreur est déjà affiché par la fonction PlugIn

 > 0 = échec ; la valeur d'erreur doit être interprétée comme une erreur système et affichée par 4NT / TC.

                 système et affichée par 4NT / TC

 

Il existe une valeur de retour spéciale (0xFEDCBA98) qui indique à l'analyseur syntaxique de supposer que le plugin a décidé de ne pas gérer la variable/fonction/commande. L'analyseur poursuit alors sa recherche d'une correspondance interne, puis externe. Notez que vous pouvez utiliser cette valeur de retour pour que votre plugin modifie la ligne de commande et la transmette ensuite à une variable/fonction/commande interne existante !

 

Pour les commandes internes, la valeur retournée est un entier (tout ce qui reste dans pszArgument sera ignoré).

 

Gestion des exceptions :

 

TCC Cette fonction piège toutes les exceptions survenant dans le plugin, afin d'éviter que le plugin ne bloque le processeur de commande. Un message d'erreur sera affiché et le plugin renverra un code de sortie = 2.

 

Take Command Interface :

 

Ajout de nouvelles fonctions API pour manipuler l'historique des répertoires et des commandes :

 

 DirHistoryStart(void) - renvoie un pointeur au début de l'historique du répertoire

 

 HistoryStart(void) - renvoie un pointeur au début de l'historique des commandes

 

 DeleteFromHistory( LPTSTR lpszLine ) - supprime la ligne de l'historique des commandes (il s'agit d'un pointeur sur la ligne à supprimer, et non d'une ligne à comparer !)

 

Si l'utilisateur essaie d'afficher l'aide en ligne avec HELP, F1 ou Ctrl-F1, TCC vérifiera la présence d'une variable de plugin, d'une fonction de variable ou d'une commande, et si le nom correspond, il recherchera, chargera et exécutera une fonction d'aide dans le plugin. Le plugin est responsable de l'affichage de sa propre aide. La fonction "Help" ne doit PAS figurer dans la liste des fonctions du greffon, délimitée par des virgules, dans pszFunctions. Help doit renvoyer 1 s'il a affiché de l'aide (ou s'il ne veut pas que TCC essaie d'afficher de l'aide pour ce sujet). La syntaxe de la fonction Help dans le plugin doit être la suivante :

 

 Help( LPTSTR pszName ) ;

 

Si Take Command veut afficher un texte d'utilisation, TCC vérifiera la présence d'une commande du plugin et, si le nom correspond, recherchera, chargera et exécutera une fonction "Usage" dans le plugin. Le plugin est responsable de l'affichage de sa propre aide. La fonction "Usage" ne doit PAS apparaître dans la liste des fonctions du plugin, délimitée par des virgules, dans pszFunctions. Le greffon doit renvoyer une chaîne de plusieurs lignes contenant la syntaxe de la commande. La première ligne (terminée par un \r) est affichée dans la barre d'état de Take Command. La chaîne complète est affichée sous forme d'info-bulle lorsque la souris survole le message de la barre d'état. Usage doit renvoyer 1 s'il a écrit quelque chose dans pszUsage (ou s'il ne veut pas que TCC essaie d'afficher une chaîne d'utilisation). La syntaxe de la fonction Usage dans le plugin devrait être la suivante :

 

 Usage( LPTSTR pszName, LPTSTR pszUsage ) ;

 

La fonction TakeCommandIPC permet aux plugins de communiquer avec l'instance Take Command qui les contrôle. La syntaxe est la suivante :

 

 __declspec(dllexport) int TakeCommandIPC( LPTSTR pszCommand, LPTSTR pszArguments ) ;

 

Les commandes prises en charge sont les suivantes :

 

ACTIVATE

 Active la fenêtre dont le handle (sous forme de chaîne décimale) se trouve dans pszArguments.

 

CDD

 Changer le dossier courant dans l'explorateur de fichiers pour le nom de répertoire figurant dans pszArguments.

 

COLOR

 Modifie la palette de couleurs de cette console. Take Command lit la palette de couleurs de la console et définit sa propre palette pour qu'elle corresponde.

 

DETACH

 Détache cette fenêtre de console (dont le PID est une chaîne décimale dans pszArguments) de Take Command.

 

FLASH

 Flash la fenêtre de l'onglet. Le nombre et le type sont passés dans pszArguments dans le même format que dans la  commande WINDOW.

 

FONT

 Change la police de caractères de cette fenêtre à onglets. pszArguments est une chaîne de caractères (délimitée par des espaces) ; voir TCFONT pour la syntaxe.

 

AIDE

 Affiche l'aide Take Command pour le sujet dans pszArguments.

 

HWND

       Renvoie l'identifiant de la fenêtre Take Command dans pszArguments.

 

HVIEW

 Renvoie l'identifiant de la fenêtre de l'onglet actif danspszArguments.

 

RECORDER

 Contrôle l'enregistreur de macros. pszArguments doit pointer vers la ligne de commande à passer à RECORDER.

 

SHORTCUT

 Renvoie le nom du raccourci qui a lancé Take Command dans pszArguments.

 

SELECTED

 Renvoie le texte actuellement sélectionné dans pszArguments.

 

START

 Attache une fenêtre de console cachée dont le PID hexagonal (sous forme de chaîne) se trouve dans pszArguments.

 

STARTNA

 Attache une fenêtre deconsole cachée dont le PID hexagonal (sous forme de chaîne) se trouve dans pszArguments, mais ne la rend pas active.

 

STATUSBAR

 Affiche le message contenu dans pszArguments dans la barre d'état.

 

TCTOOLBAR

 Mettre à jour la barre d'outils de l'onglet Take Command avec la  ligne de commande TCTOOLBAR contenue dans pszArguments.

 

TCFILTER

 Renvoie le filtre sélectionné dans la fenêtre de l'explorateur de fichiers dans pszArguments.

 

TCFILTER_CMD

 Définit le filtre sélectionné dans la fenêtre de l'explorateur de fichiers à la valeur indiquée dans pszArguments.

 

TCFOLDER

 Retourne le dossier sélectionné dans le contrôle d'arborescence Folders dans pszArguments.

 

TCLISTVIEW

 Renvoie une liste délimitée par des espaces dans pszArguments des fichiers sélectionnés dans le contrôle de la vue en liste de l'explorateur.

 

TCTABACTIVE

 Retourne 1 si l'onglet courant est actif.

 

TCTAB

 Retourne1 si l'ID du processus dans pszArguments est en cours d'exécution dans une fenêtre TC.

 

TCTABS

 Renvoie le nombre de fenêtres d'onglets Take Command.

 

TCTABVISIBLE

 Renvoie 1 si l'onglet actuel est visible.

 

TRANS

 Définit la transparence de la fenêtre Take Command la transparence de la fenêtre à la valeur de la chaîne (0-100) dans pszArguments.

 

USAGE

 Affiche le message d'utilisation de pszArguments dans la barre d'état. La première ligne (jusqu'au premier CR) est affichée dans la barre d'état.

       le reste est affiché dans l'infobulle si vous passez la souris sur la barre d'état.

 

FENÊTRE

 Possède un certain nombre d'arguments (spécifiés sous forme de chaîne dans pszArguments) pour contrôler la fenêtre Take Command:

MAX

MIN

CACHER

RES

TRAY

TRANS=n

FLASH=n

DETACH n (où n est le PID du processus à détacher)

TOPMOST

NOTOPMOST

TOP

BOTTOM

 

WSHELL

 Changer le répertoire de travail Take Command le répertoire de travail au nom du répertoire de l'interpréteur de commandes spécifié dans pszArguments.

 

WSHORTCUT

 Passer au nom du raccourci de l'explorateur spécif ié dans pszArguments.

 

Achèvement du nom de fichier

 

Lorsque TCC effectue une complétion de nom de fichier ("tab"), il recherche une fonction d'extension nommée TABCOMPLETION. Comme les scripts TABCOMPLETE, TABCOMPLETION vous permet de créer des fonctions d'extension pour personnaliser la complétion de nom de fichier de TCC. La syntaxe est la suivante :

 

INT WINAPI TABCOMPLETION(LPCTSTR Commande, LPCTSTR Argument, int Index, LPCTSTR CommandLine) ;

 

Commande - le nom de la commande au début de la ligne de commande

 

Argument - l'argument en cours d'évaluation

 

Index - le décalage dans la ligne de commande du début de l'argument

 

CommandLine - la ligne de commande entière (entre guillemets)

 

Lorsque la fonction du plugin se termine, elle doit renvoyer 0 si elle a traité l'achèvement, et enregistrer le(s) résultat(s) dans la variable d'environnement TABCOMPLETIONRESULT. Si la fonction a plusieurs résultats de complétion, ils doivent être ajoutés à TABCOMPLETIONRESULT, séparés par un espace (et entre guillemets doubles s'ils contiennent des espaces).

 

TCC examine le contenu de TABCOMPLETIONRESULT ; s'il contient une seule valeur, TCC l'insère au point d'achèvement sur la ligne de commande. S'il y a plusieurs valeurs de retour, TCC affichera une fenêtre popup pour la sélection (comme la fenêtre de complétion F7).

 

TCC TCC essaiera d'abord de trouver un script de complétion de nom de fichier ; si aucun d'entre eux n'effectue la complétion demandée, cherchera la fonction de plugin.

 

Vous pouvez spécifier un plugin particulier à exécuter en préfixant le nom de la fonction / variable / commande avec le nom du plugin et un $. Par exemple :

 

echo %_myplugin$variable

echo %@myplugin$func[abc]

monplugin$mycommande