AHK au minimum. Classeur

Idée


Hey. Je suis un développeur C # .NET débutant (en tant que débutant de deuxième année). J'étais fatigué d'écrire toutes sortes de calculatrices, etc., alors je me suis demandé: "Qu'est-ce qui me manque dans Windows?" Et la réponse à laquelle je suis venu m'a donné l'idée: «Tout». Il y avait donc Binder, un projet qui m'a permis d'en apprendre beaucoup sur C #, .NET et WPF, et m'a donné de bons logiciels que j'aimais tellement que j'ai décidé de le montrer à tout le monde.

À propos du programme lui-même


Le classeur est destiné, de manière inattendue, aux liaisons. Ces liaisons peuvent être configurées pour n'importe quelle combinaison de touches: bouton + 2 modificateurs (CTRL, Shift, ALt, Win), ainsi que des scripts de bâton sur eux. Le script est écrit dans un langage interne, que j'ai essayé de rendre aussi similaire que possible à C #.
Le principe est le même que dans AutoHotKey. Le programme est livré avec une DLL, dans laquelle j'ajoute lentement diverses fonctions (il y en a 49 maintenant). À mon avis, le langage Binder peut déjà être considéré comme un langage de programmation interprété, quoique peu capable, car il existe déjà une construction if-else, des boucles while et repeat, des fonctions (asynchrones également), des instructions break et return, des types de données int, double, bool, string.

Dans le programme, les classeurs fonctionnent globalement sur tout le PC, et la simulation de touches tirée d'AHK peut simuler des frappes dans presque toutes les applications.

La première tâche que je voulais résoudre avec Binder était d'afficher / masquer les icônes du bureau. Et donc le premier script que j'ai ajouté est ShowHideDesktopIcons (bool show). Mais ici, la question se pose, comment faire à la fois cacher et montrer avec un seul bouton? Je l'ai décidé en ajoutant le paramètre «Bind switch» aux classeurs, ce qui vous permet de suspendre 2 scripts sur 1 liaison à la fois, qui sont exécutés tour à tour. Déjà maintenant sur Binder, vous pouvez créer un autoclicker, ou par exemple, une liaison, Ctrl + Shift + C, qui ajoutera le texte sélectionné au presse-papiers et ne le remplacera pas, ou une liaison pour éteindre / redémarrer le PC. L'une des plus utiles est la liaison «Super Alt + F4», qui reçoit le processus de fenêtre actif et le tue. Le programme prend en charge les variables: vous pouvez enregistrer n'importe quelle valeur à l'aide de SetVar () et l'obtenir GetVar (). Aujourd'hui avec des attributs créés pour exécuter des scripts,et le premier était Block, qui bloque la frappe de la liaison jusqu'à ce que son thread principal soit terminé. Dans un avenir proche, il est prévu d'ajouter des espaces de noms pour transférer des variables d'un script à un autre.

Un ajout utile, je pense, est la fonction d'enregistrement, qui enregistre toutes les actions du clavier et de la souris, les transformant immédiatement en script pour Binder.

Dans la fenêtre d'aide, vous pouvez trouver toutes les fonctions disponibles, et bientôt des attributs pour les scripts apparaîtront.

Toutes les liaisons peuvent être enregistrées dans un fichier afin de ne pas perdre.

Dans les paramètres, vous pouvez activer le lancement du programme avec Windows, configurer le fichier de liaison par défaut à ouvrir.



Je veux noter une chose pratique: lors de l'utilisation de constructions imbriquées (par exemple, si à l'intérieur du temps), après avoir cliqué sur le bouton "Enregistrer", le script sera magnifiquement formaté.

Syntaxe


Dans Binder, la syntaxe familière à tous les programmeurs a été faite à l'image de C #.

Par exemple, un appel à la fonction MsgBox (comme n'importe quelle autre) ressemble à ceci:

MsgBox(" ", "    ");

Lorsque cette ligne est exécutée, le résultat sera le suivant:



MsgBox () accepte les paramètres, vous pouvez les voir pour chaque fonction dans la fenêtre d'aide.

Pour vous aider, toutes les fonctions sont triées par type de valeur de retour:



Quiconque a écrit en C ++ / C # comprendra immédiatement comment cela fonctionne, à l'exception du premier type: les fonctions du groupe "Non-Returning Values" renvoient les paramètres qui leur sont transmis.
Par exemple:

MsgBox(MsgBox("Hello"));

2 fois affichera un message avec le texte "Bonjour".

A partir de cette ligne, un détail plus important peut être compris: certaines fonctions peuvent être transférées aux paramètres par d'autres.

En plus des fonctions intégrées, le programme a différentes conceptions. Il convient de noter que j'ai toute structure entière considérée comme 1 équipe, donc à la fin de chacun d'eux, vous devez mettre ;. Je l'enlèverai plus tard.

Construction if-else.


Cela fonctionne comme dans n'importe quelle autre langue:

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

Vous pouvez écrire autant d'autre chose si vous le souhaitez, écrire / ne pas écrire d'autre, en général, comme vous le souhaitez. L'essentiel est que, entre parenthèses, <condition> doit être de type booléen. Par exemple, vous pouvez y écrire vrai et la condition sera toujours satisfaite.

Répéter la construction


repeat est la boucle la plus simple du programme, il doit y avoir une valeur Int entre parenthèses, et elle répète simplement l'action le nombre de fois spécifié, par exemple:

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

Affiche 5 fois le message "Bonjour".

Il a 2 modifications:

1) async repeat (). Un thread séparé sera alloué pour son exécution, c'est-à-dire immédiatement après son début, les fonctions après son exécution seront exécutées.

2) allasync repeat () commencera immédiatement à exécuter le code en lui-même le nombre de fois spécifié, par exemple:

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

Il affichera en même temps 5 messages:



Pendant la construction


Alors - littéralement de l'anglais. - alors que la condition est vraie. Exécute des fonctions en lui-même tant que la condition est vraie entre parenthèses. Cette condition doit être de type booléen.

Vous pouvez annuler de force l'exécution de la boucle à l'aide de l'instruction break; Exemple:

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

Imprimez les messages avec des nombres de 1 à 11 et quittez.

While a également une modification de async while, qui l'exécute simplement dans un thread séparé, vous permettant de continuer à exécuter le code principal.

Les fonctions


Dans Binder, vous pouvez déclarer et utiliser vos fonctions et leur passer des paramètres

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

Ma sortie:



Les fonctions peuvent également renvoyer des valeurs, pour cela vous devez utiliser l'instruction return:

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

Maintenant le même résultat, seul le message est affiché 2 fois.

À propos du groupe


Ainsi, vous pouvez créer n'importe quoi sur la base de Binder, vous n'avez besoin que de fonctions dans la bibliothèque, que je peux ajouter très simplement, pour cela je n'ai besoin que d'idées. C'est l'une des raisons de la création du groupe VKontakte vk.com/public192980751 . Binder est absolument gratuit et je suis prêt à répondre à toutes vos questions sur le programme. S'il vous plaît, soutenez-moi en me conseillant simplement quoi ajouter, en testant le projet ou simplement en vous inscrivant au groupe.

PS Le projet est apparu sur GitHub github.com/Electrominch/Binder

All Articles