AHK como mínimo. Aglutinante

Idea


Oye. Soy un desarrollador principiante de C # .NET (como principiante de segundo año). Estaba cansado de escribir todo tipo de calculadoras, etc., así que me pregunté: "¿Qué me estoy perdiendo en Windows?" Y la respuesta a la que llegué me dio la idea: "Todo". Entonces estaba Binder, un proyecto que me permitió aprender mucho sobre C #, .NET y WPF, y que me dio un buen software que me gustó tanto que decidí mostrárselo a todos.

Sobre el programa en sí


Binder está destinado, inesperadamente, a los enlaces. Estos enlaces se pueden configurar para cualquier combinación de teclas: botón + 2 modificadores (CTRL, Shift, ALt, Win), así como scripts pegados en ellos. El script está escrito en un lenguaje interno, que traté de hacer lo más similar posible a C #.
El principio es el mismo que en AutoHotKey. El programa viene con una DLL, en la cual agrego lentamente varias funciones (hay 49 de ellas ahora). En mi opinión, el lenguaje Binder ya puede considerarse un lenguaje de programación interpretado, aunque poco capaz, porque ya existe una construcción if-else, while y repite bucles, funciones (también asíncronas), declaraciones de interrupción y retorno, int, double, bool, tipos de datos de cadena.

En el programa, las carpetas funcionan globalmente en toda la PC, y la simulación de teclas tomada de AHK puede simular pulsaciones de teclas en casi todas las aplicaciones.

La primera tarea que quería resolver con Binder era mostrar / ocultar iconos de escritorio. Y así, el primer script que agregué es ShowHideDesktopIcons (bool show). Pero aquí surge la pregunta, ¿cómo hacer que tanto ocultar como mostrar con un solo botón? Lo decidí agregando el parámetro "Conmutador de enlace" a las carpetas, que le permite colgar 2 scripts en 1 enlace a la vez, que se ejecutan a su vez. Ya en Binder puedes hacer un autoclicker, o por ejemplo, un enlace, Ctrl + Shift + C, que agregará el texto seleccionado al portapapeles, y no lo reemplazará, o un enlace para apagar / reiniciar la PC. Uno de los más útiles es el enlace "Super Alt + F4", que recibe el proceso de ventana activa y lo mata. El programa tiene soporte para variables: puede guardar cualquier valor usando SetVar () y obtenerlo GetVar (). Hoy con atributos hechos para ejecutar scripts,y el primero fue Block, que bloquea la pulsación del enlace hasta que se complete su hilo principal. En un futuro cercano, se planea agregar espacios de nombres para transferir variables de un script a otro.

Una adición útil, creo, es la función Grabar, que registra todas las acciones desde el teclado y el mouse, convirtiéndolas inmediatamente en un script para Binder.

En la ventana de ayuda puede encontrar todas las funciones disponibles, y pronto aparecerán atributos para los scripts.

Todos los enlaces se pueden guardar en un archivo para no perderlos.

En la configuración, puede habilitar el inicio del programa con Windows, configure el archivo de enlace predeterminado que se abrirá.



Quiero señalar una cosa conveniente: cuando use construcciones anidadas (por ejemplo, si está dentro del tiempo), después de hacer clic en el botón "Guardar", el script se formateará maravillosamente.

Sintaxis


En Binder, la sintaxis familiar para todos los programadores se hizo a semejanza de C #.

Por ejemplo, una llamada a la función MsgBox (como cualquier otra) se ve así:

MsgBox(" ", "    ");

Cuando se ejecuta esta línea, el resultado será el siguiente:



MsgBox () acepta los parámetros, puede verlos para cada función en la ventana de ayuda.

Para ayudar, todas las funciones se ordenan según el tipo de valor de retorno:



cualquiera que haya escrito en C ++ / C # comprenderá de inmediato cómo funciona esto, excepto el primer tipo: las funciones del grupo "Valores no devueltos" devuelven los parámetros que se les han pasado.
Por ejemplo:

MsgBox(MsgBox("Hello"));

2 veces se mostrará un mensaje con el texto "Hola".

A partir de esta línea, se puede entender un detalle más importante: otras pueden transferir algunas funciones a los parámetros.

Además de las funciones integradas, el programa tiene varios diseños. Cabe señalar que tengo toda la estructura considerada como 1 equipo, por lo que al final de cada uno de ellos debe poner ;. Lo eliminaré más tarde.

Construir si no.


Funciona igual que en cualquier otro idioma:

if(<1>)
{
<1>
}
else if(<2>)
{
<2>
}
....
else
{<,    false>};

Puede escribir tanto más si lo desea, escribir / no escribir más, en general, como desee. Lo principal es que entre paréntesis <condition> debería ser de tipo Boolean. Por ejemplo, puede escribir verdadero allí, y la condición siempre se cumplirá.

Repita la construcción


repetir es el ciclo más simple en el programa, debe haber un valor Int entre paréntesis, y simplemente repite la acción el número especificado de veces, por ejemplo:

repeat(SumInt(2,3))
{
    MsgBox("");
};

5 veces muestra el mensaje "Hola".

Tiene 2 modificaciones:

1) repetición asíncrona (). Se asignará un hilo separado para su ejecución, es decir Inmediatamente después de su inicio, se ejecutarán las funciones posteriores.

2) allasync repeat () comenzará inmediatamente a ejecutar el código dentro de sí mismo el número especificado de veces, por ejemplo:

allasync repeat(5)
{
    MsgBox("Hello");
};

Al mismo tiempo, mostrará 5 mensajes:



Mientras construye


Mientras que, literalmente, del inglés. - Mientras la condición es verdadera. Realiza funciones dentro de sí mismo siempre que la condición sea verdadera entre paréntesis. Esta condición debe ser de tipo booleano.

Puede abortar forzosamente la ejecución del bucle utilizando la instrucción break; Ejemplo:

SetVar("i", 0);
while(true)
{
    SetVar("i", SumInt(GetVar("i"), 1));
    MsgBox(GetVar("i"));
    if(MoreThan(GetVar("i"), 10))
    {
        break;
    };
    
};
MsgBox("");

Imprima mensajes con números del 1 al 11 y salga.

While también tiene una modificación de async while, que simplemente lo ejecuta en un hilo separado, lo que le permite continuar ejecutando el código principal.

Las funciones


En Binder, puede declarar y usar sus funciones y pasarles parámetros.

func f1(text)
{
MsgBox(ReplaceString(text, "\", " habr "));
};
f1(GetDesktopPath());

Mi salida:



también las funciones pueden devolver valores, para esto necesitas usar la declaración return:

func f1(text)
{
    return MsgBox(ReplaceString(text, "\", " habr "));
};
MsgBox(f1(GetDesktopPath()));

Ahora el mismo resultado, solo el mensaje se muestra 2 veces.

Sobre el grupo


Por lo tanto, puede crear cualquier cosa sobre la base de Binder, solo necesita funciones en la biblioteca, que puedo agregar de manera muy simple, para esto solo necesito ideas. Esta es una de las razones para crear el grupo VKontakte vk.com/public192980751 . Binder es totalmente gratuito y estoy listo para ayudarlo con cualquier pregunta sobre el programa. Por favor, ayúdenme simplemente aconsejando qué agregar, probando el proyecto o simplemente suscribiéndose al grupo.

PD: el proyecto apareció en GitHub github.com/Electrominch/Binder

All Articles