TCC pLos lugins son archivos DLL escritos por el usuario que le permiten escribir sus propias variables internas, funciones variables y comandos internos, y tienen TCC cárguelos al inicio. Los nombres de los complementos anularán los nombres existentes, por lo que puede ampliar y/o reemplazar variables y comandos internos. Cuando TCC inicia, cargará automáticamente cualquier complemento en el directorio predeterminado (el subdirectorio PLUGINS\ en el TCC directorio de instalación). Los complementos se cargarán antes del archivo de inicio (TCINICIO) se ejecutan.
Puede especificar un complemento en particular para ejecutar anteponiendo el nombre de la función/variable/comando con el nombre del complemento y un $. Por ejemplo:
eco %_myplugin$variable
echo %@myplugin$func[abc]
miplugin$micomando
Los complementos se pueden escribir en cualquier idioma que pueda crear una DLL de Windows. El TCC El complemento SDK tiene ejemplos para Visual C++ y Delphi. El SDK está disponible en nuestro sitio web en https://jpsoft.com/downloads/sdk/sdk.zip.
Complementos de pulsación de teclas:
También puede escribir complementos de pulsación de teclas que se llamarán por cada pulsación de tecla ingresada en la línea de comando. Un complemento de pulsación de teclas puede realizar acciones cuando se ingresa una clave específica, o incluso cambiar la clave antes de devolverla al procesador de comandos. Los complementos de pulsaciones de teclas se llaman después de los alias de teclas y antes TCC busca la acción predeterminada para esa clave.
Solo V24+: Si el valor pasado en "nKey" es 0, la clave no es un carácter Unicode válido y el complemento necesita analizar el pszClave cadena para obtener el nombre. El nombre se pasará en el formato:
Tecla [Ctrl-][Alt-][Shift-]
Por ejemplo, mediante los siguientes elementos:
F12
Ctrl-f1
Ctrl-Alt-Izquierda
Ctrl-Mayús-F5
El complemento de pulsación de teclas puede modificar el nClave or pszClave valor y pasarlo de nuevo a TCC para evaluar la acción predeterminada para el (nuevo) valor. Si nClave es != 0, TCC lo tratará como un carácter Unicode normal. Si nClave = 0, TCC evaluará pszClave para obtener un nombre clave válido.
Si el complemento manejó la clave y no quiere TCC para hacer algo más, configure nClave a 0 y pszClave a una cadena vacía (escriba un valor nulo en el primer byte).
Sintaxis del complemento:
// Estructura PluginInfo: devuelta por el complemento en respuesta a la llamada GetPluginInfo() desde el procesador de comandos
// Tenga en cuenta que todas las cadenas deben ser Unicode; Si su complemento está compilado para ASCII, deberá utilizar
// la API MultiByteToWideChar para convertir las cadenas antes de devolverlas a TCC
typedef struct {
TCHAR *pszDll; // nombre de la DLL
TCHAR *pszAutor; // nombre del autor
TCHAR *pszCorreo electrónico; // correo electrónico del autor
TCHAR *pszWWW; // página web del autor
TCHAR *pszDescripción; // (breve) descripción del complemento
TCHAR *pszFunciones; // lista de funciones delimitadas por comas en el
// complemento (inicial _ para vars internas, @ para
// var funcs, * para la función de pulsación de tecla,
// de lo contrario es un comando)
int nMayor; // versión principal del complemento #
int nMenor; // versión menor del complemento #
int nConstruir; // compilación del complemento #
HMÓDULO hMódulo; // identificador del módulo
TCHAR *pszModule; // Nombre del módulo
} PLUGININFO, *LPPLUGININFO;
// estructura pasada a funciones de complemento para monitorear las pulsaciones de teclas. A
// la función de pulsación de tecla puede tener cualquier nombre, pero debe anteponer un
// * a su nombre en la lista de funciones (pszFunctions, arriba).
// Si el complemento de pulsación de tecla manejó la pulsación de tecla y no quiere
// para devolvérselo a TCC, debería establecer nKey = 0 y pszKey en una cadena vacía.
// El procesador de comandos llamará a la función de pulsación de tecla con todos
// parámetros establecidos en 0 justo antes de aceptar entradas para cada nuevo
// línea de comando.
// Los punteros de cadena son Unicode
typedef struct {
int nClave; // clave introducida
int nHomeRow; // iniciar fila
int nColumnaInicio; // columna de inicio
int nFila; // fila actual en la ventana
int nColumna; // columna actual en la ventana
LPTSTR pszLine; // línea de comando
LPTSTR pszActual; // puntero a la posición en la línea
int fRedibujar; // si != 0, vuelve a dibujar la línea
LPTSTR pszKey; // (solo v24+) nombre ASCII de la clave (por ejemplo, "Ctrl-Alt-Inicio")
} INFORMACIÓN CLAVE, *LPCLAVEINFO;
__declspec(exportar dll) BOOL WINAPI InicializarPlugin( vacío ); // llamado por el procesador de comandos después de cargar todos los complementos
__declspec(exportar dll) LPPLUGININFO WINAPI GetPluginInfo( HMODULE hModule ); // llamado por el procesador de comandos para obtener información del complemento, principalmente para los nombres de funciones y comandos
__declspec(exportar dll) BOOL WINAPI ShutdownPlugin( BOOL bEndProcess ); // llamado por el procesador de comandos al apagar
// si bEndProcess = 0, solo se cierra el complemento
// si bEndProcess = 1, el procesador de comandos se está apagando
Las funciones enumeradas en "pszFunctions" y llamadas por TCC debe estar en el formato:
DLLExports INT WINAPI MyFunctionName( LPTSTR pszArguments );
Los nombres de las variables internas en pszFunctions (y sus funciones correspondientes) deben comenzar con un guión bajo ('_').
Los nombres de funciones variables en pszFunctions deben comenzar con @; la función correspondiente debe tener el prefijo "f_". (Esto permite que las funciones variables tengan el mismo nombre que los comandos internos).
Por ejemplo, mediante los siguientes elementos:
pszFunctions = "inverso, @inverso"
Al ingresar el nombre "reverse" en la línea de comando se invocará el comando reverse()
Al ingresar el nombre "@reverse[]" en la línea de comando se invocará la función variable f_reverse()
Los nombres de funciones variables están limitados a un máximo de 31 caracteres.
Los nombres de los comandos internos son cualquier combinación de caracteres alfanuméricos (máximo 12 caracteres).
Llamando al complemento:
Para variables internas, pszArguments está vacío (solo para salida)
Para funciones variables, pszArguments pasa los argumentos a la función del complemento.
Para comandos internos, pszArguments es la línea de comando menos el nombre del comando interno
Volviendo del complemento:
Para variables internas y funciones variables, copie la cadena de resultado sobre pszArguments. La longitud máxima de cadena para variables internas y funciones de variables es 32 K (32767 caracteres + carácter nulo final).
Las variables internas no tienen un valor de retorno entero significativo. Para funciones variables, el retorno de números enteros puede ser:
0 = éxito
< 0 = fracaso; mensaje de error ya mostrado por la función PlugIn
> 0 = fracaso; El valor de error debe interpretarse como un error del sistema y
mostrado por 4NT / TC
Hay un valor de retorno especial (0xFEDCBA98) que le dice al analizador que asuma que el complemento decidió no manejar la variable/función/comando. Luego, el analizador continúa buscando una coincidencia interna y luego externa. Tenga en cuenta que puede usar este valor de retorno para que su complemento modifique la línea de comando y luego la pase a una variable/función/comando interno existente.
Para comandos internos, devuelve el resultado entero (se ignorará todo lo que quede en pszArgument)
Manejo de excepciones:
TCC atrapará cualquier excepción que ocurra en el complemento, para evitar que el complemento bloquee el procesador de comandos. Se mostrará un mensaje de error y el complemento devolverá un código de salida = 2.
Completar nombre de archivo
Cuándo TCC está completando el nombre de archivo ("tab"), buscará una función de complemento llamada TABCOMPLETION. Al igual que los scripts TABCOMPLETE, TABCOMPLETION le permite crear funciones de complemento para personalizar TCCFinalización del nombre de archivo. La sintaxis es:
INT COMPLETACIÓN DE TABLAS DE WINAPI(Comando LPCTSTR, Argumento LPCTSTR, índice entero, Línea de comando LPCTSTR);
Comando: el nombre del comando al principio de la línea de comando
Argumento: el argumento actual que se está evaluando.
Índice: el desplazamiento en la línea de comando del comienzo del argumento
CommandLine: toda la línea de comando (comillas dobles)
Cuando finaliza la función del complemento, debería devolver 0 si procesó la finalización y guardar los resultados en la variable de entorno TABCOMPLETIONRESULT. Si la función tiene varios resultados de finalización, deben agregarse a TABCOMPLETIONRESULT, separados por un espacio (y entre comillas dobles si contienen espacios en blanco).
TCC examinará el contenido de TABCOMPLETIONRESULT; si contiene un solo valor TCC lo insertará en el punto de finalización en la línea de comando. Si hay varios valores de retorno, TCC mostrará una ventana emergente para su selección (como la ventana de finalización F7).
TCC primero intentará encontrar un script para completar el nombre del archivo; si ninguno de ellos realiza la finalización solicitada, TCC Buscará la función del complemento.
Puede especificar un complemento en particular para ejecutar anteponiendo el nombre de la función/variable/comando con el nombre del complemento y un $. Por ejemplo:
eco %_myplugin$variable
echo %@myplugin$func[abc]
miplugin$micomando