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.
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.
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.
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.
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
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