AHK im Minimum. Bindemittel

Idee


Hallo. Ich bin ein Anfänger C # .NET Entwickler (als Anfänger im zweiten Jahr). Ich hatte es satt, alle möglichen Taschenrechner usw. zu schreiben, und fragte mich: "Was fehlt mir in Windows?" Und die Antwort, zu der ich kam, brachte mich auf die Idee: "Alles." Es gab also Binder, ein Projekt, mit dem ich viel über C #, .NET und WPF lernen konnte und das mir eine gute Software gab, die mir so gut gefiel, dass ich mich entschied, sie allen zu zeigen.

Über das Programm selbst


Binder ist unerwartet für Bindungen vorgesehen. Diese Bindungen können für jede Tastenkombination konfiguriert werden: Schaltfläche + 2 Modifikatoren (STRG, Umschalt, ALt, Win) sowie Stick-Skripte. Das Skript ist in einer internen Sprache geschrieben, die ich versucht habe, C # so ähnlich wie möglich zu machen.
Das Prinzip ist das gleiche wie in AutoHotKey. Das Programm enthält eine DLL, in die ich langsam verschiedene Funktionen hinzufüge (es gibt jetzt 49 davon). Meiner Meinung nach kann die Binder-Sprache bereits als interpretierte Programmiersprache angesehen werden, wenn auch wenig fähig, weil Es gibt bereits ein if-else-Konstrukt, while- und repeat-Schleifen, Funktionen (auch asynchron), break- und return-Anweisungen, Datentypen int, double, bool, string.

Im Programm arbeiten die Ordner global auf dem gesamten PC, und die von AHK übernommene Schlüsselsimulation kann in fast allen Anwendungen Tastenanschläge simulieren.

Die erste Aufgabe, die ich mit Binder lösen wollte, war das Ein- / Ausblenden von Desktopsymbolen. Das erste Skript, das ich hinzugefügt habe, ist ShowHideDesktopIcons (bool show). Aber hier stellt sich die Frage, wie man mit einem Knopf sowohl ein- als auch einblendet. Ich habe es entschieden, indem ich den Bindemitteln den Parameter "Bind switch" hinzugefügt habe, mit dem Sie 2 Skripte gleichzeitig an 1 Bindung hängen können, die nacheinander ausgeführt werden. Bereits jetzt in Binder können Sie einen Autoklicker oder beispielsweise eine Bindung, Strg + Umschalt + C, erstellen, mit der der ausgewählte Text in die Zwischenablage eingefügt und nicht ersetzt wird, oder eine Bindung, um den PC auszuschalten / neu zu starten. Eine der nützlichsten ist die Bindung „Super Alt + F4“, die den aktiven Fensterprozess empfängt und beendet. Das Programm unterstützt Variablen: Sie können jeden Wert mit SetVar () speichern und GetVar () abrufen. Heute mit gemachten Attributen zum Ausführen von Skripten,und der erste war Block, der den Tastendruck der Bindung blockiert, bis der Haupt-Thread abgeschlossen ist. In naher Zukunft ist geplant, Namespaces hinzuzufügen, um Variablen von einem Skript in ein anderes zu übertragen.

Eine nützliche Ergänzung, denke ich, ist die Aufnahmefunktion, die alle Aktionen über Tastatur und Maus aufzeichnet und sie sofort in ein Skript für Binder verwandelt.

Im Hilfefenster finden Sie alle verfügbaren Funktionen, und bald werden Attribute für Skripte angezeigt.

Alle Bindungen können in einer Datei gespeichert werden, um nicht zu verlieren.

In den Einstellungen können Sie den Start des Programms unter Windows aktivieren und die zu öffnende Standardbindungsdatei konfigurieren.



Ich möchte eine praktische Sache beachten: Wenn Sie verschachtelte Konstruktionen verwenden (z. B. innerhalb der Weile), wird das Skript nach dem Klicken auf die Schaltfläche „Speichern“ wunderschön formatiert.

Syntax


In Binder wurde die allen Programmierern vertraute Syntax in Anlehnung an C # erstellt.

Ein Aufruf der MsgBox-Funktion (wie jeder andere) sieht beispielsweise folgendermaßen aus:

MsgBox(" ", "    ");

Wenn diese Zeile ausgeführt wird, lautet das Ergebnis wie folgt:



MsgBox () akzeptiert die Parameter. Sie können sie für jede Funktion im Hilfefenster anzeigen.

Um zu helfen, werden alle Funktionen nach dem Typ des Rückgabewerts sortiert:



Jeder, der in C ++ / C # geschrieben hat, wird sofort verstehen, wie dies funktioniert, mit Ausnahme des ersten Typs: Funktionen aus der Gruppe "Nicht zurückgebende Werte" geben die an sie übergebenen Parameter zurück.
Zum Beispiel:

MsgBox(MsgBox("Hello"));

2 mal wird eine Meldung mit dem Text "Hallo" angezeigt.

Aus dieser Zeile kann ein weiteres wichtiges Detail verstanden werden: Einige Funktionen können von anderen auf Parameter übertragen werden.

Zusätzlich zu den integrierten Funktionen verfügt das Programm über verschiedene Designs. Es sollte beachtet werden, dass ich jede ganze Struktur als 1 Team betrachte, also müssen Sie am Ende jedes von ihnen setzen;. Ich werde es später entfernen.

If-else-Konstrukt.


Es funktioniert wie in jeder anderen Sprache:

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

Sie können so viel schreiben, wenn Sie möchten, schreiben / nicht schreiben, im Allgemeinen, wie Sie möchten. Die Hauptsache ist, dass <Kondition> in Klammern vom Typ Boolean sein sollte. Beispielsweise können Sie dort true schreiben, und die Bedingung wird immer erfüllt.

Konstrukt wiederholen


repeat ist die einfachste Schleife im Programm, es muss ein Int-Wert in Klammern stehen, und die Aktion wird einfach so oft wiederholt, wie zum Beispiel:

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

5 mal wird die Meldung "Hallo" angezeigt.

Es hat 2 Modifikationen:

1) asynchrone Wiederholung (). Ein separater Thread wird für seine Ausführung zugewiesen, d. H. Unmittelbar nach dem Start werden die Funktionen nach der Ausführung ausgeführt.

2) allasync repeat () startet sofort die Ausführung des Codes in sich selbst in der angegebenen Anzahl von Malen, zum Beispiel:

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

Gleichzeitig werden 5 Meldungen angezeigt:



Während konstruieren


Während - buchstäblich aus dem Englischen. - während die Bedingung wahr ist. Führt Funktionen in sich selbst aus, solange die Bedingung in Klammern erfüllt ist. Diese Bedingung muss vom Typ Boolean sein.

Sie können die Schleifenausführung mit der break-Anweisung zwangsweise abbrechen. Beispiel:

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

Drucken Sie Nachrichten mit Nummern von 1 bis 11 und beenden Sie das Programm.

While hat auch eine Modifikation von async while, die es einfach in einem separaten Thread ausführt, sodass Sie den Hauptcode weiter ausführen können.

Funktionen


In Binder können Sie Ihre Funktionen deklarieren und verwenden und Parameter an sie übergeben

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

Meine Ausgabe:



Auch Funktionen können Werte zurückgeben, dazu müssen Sie die return-Anweisung verwenden:

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

Jetzt das gleiche Ergebnis, nur die Meldung wird 2 mal angezeigt.

Über die Gruppe


Sie können also alles auf Basis von Binder erstellen, Sie benötigen nur Funktionen in der Bibliothek, die ich sehr einfach hinzufügen kann, dafür brauche ich nur Ideen. Dies ist einer der Gründe für die Erstellung der VKontakte-Gruppe vk.com/public192980751 . Binder ist absolut kostenlos und ich bin bereit, bei allen Fragen zum Programm zu helfen. Bitte unterstützen Sie mich, indem Sie einfach mitteilen, was hinzugefügt werden soll, das Projekt testen oder einfach die Gruppe abonnieren.

PS Das Projekt erschien auf GitHub github.com/Electrominch/Binder

All Articles