Если хотите сразу перейти к практике, начните с живого примера — он особенно полезен, если вы только знакомитесь с миром C#.
А этот пример уже немного сложнее и ближе к тому, как всё устроено внутри EyeAuras.
С самого начала в программе была возможность писать собственный код на C#. В ранних версиях (примерно весной 2021 года) это было неудобно и местами болезненно, но всё же работало. Весной 2023 года вышла вторая версия, где появились такие возможности, как использование внешней IDE для написания кода, а сам скриптинг стал заметно мощнее. Например, стало возможно создавать полноценный пользовательский интерфейс на Blazor. По сути, это открыло путь к действительно сильным скриптам, хотя ограничений и «особенностей» всё ещё хватало.
А теперь, весной 2024 года, постепенно появляется новая версия скриптов. В этом, уже третьем поколении, возможности системы огромны: доступно почти всё, что умеет сама программа, можно подключать внешние NuGet-пакеты, есть защита от падений и типичных ошибок и многое другое.
Порог входа тоже стал заметно ниже: появились новые API, улучшилась диагностика и не только.
Программа построена на платформе .NET. Это быстро развивающаяся платформа с высокой гибкостью и производительностью. В качестве языка для скриптов используется C# 12.
Каждый написанный вами скрипт компилируется через Roslyn. Большая часть головной боли, связанной с тем, как подключать файлы, что можно делать, а что нельзя, уже решена внутри самой программы. Поэтому вы можете сосредоточиться именно на логике скрипта.

В программе есть три способа запускать ваш код, и все они работают внутри песочницы.
Самый простой вариант. Достаточно добавить действие "C# Script". Оно подчиняется тем же правилам, что и любые другие действия, поэтому для запуска нужно добавить триггер. Например, можно использовать Hotkey Is Active, назначить его на кнопку и запускать скрипт по нажатию или удержанию.
Более сложный вариант — ваш скрипт будет выполняться через определённые интервалы времени. Предполагается, что где-то в коде вы будете возвращать true/false или null, чтобы активировать или деактивировать триггер. После этого к триггеру можно привязать действия, в том числе и скриптовые.
Сложность здесь в том, что такой скрипт работает постоянно и управляется только через Enabling Conditions. Поэтому код нужно писать аккуратнее: иначе легко получить ситуацию, когда ошибка в скрипте постоянно перехватывает управление мышью/клавиатурой или съедает всю доступную память на компьютере.
Самый продвинутый вариант скриптинга. Помимо всего, что доступно в actions/triggers, WebUI позволяет создавать собственный пользовательский интерфейс: кнопки, переключатели, поля ввода и другие элементы.
Для отрисовки интерфейса используется технология Blazor, и по состоянию на 2024 год это лучшее, что инфраструктура .NET может предложить для подобных задач. У самой технологии, конечно, есть свои минусы — идеальных решений не бывает, — но EyeAuras предоставляет инструменты, которые сглаживают эти проблемы. В итоге ваши возможности ограничены в основном только фантазией.
Ниже — несколько примеров различных форм, собранных на WebUI.


February 20, 2024
На момент написания статьи WebUI всё ещё использует более старую версию скриптов. В ближайшие недели это будет обновлено.
И сама программа, и её API построены вокруг подхода под названием Dependency Injection. Проще говоря, программа разделена на небольшие части, каждая из которых отвечает за свою задачу. Как в большом доме: кто-то варит кашу, кто-то штопает носки, а кто-то ничего не умеет, но всё равно существует.
У каждой такой сущности в этом доме есть имя. Например, если вы хотите двигать мышь, нужно обратиться к ISendInputUnstableScriptingApi и вызвать MouseMoveTo. Если нужно воспроизвести звук, используйте IPlaySoundScriptingApi.
Обязанности у сервисов разные, и, как и в жизни, знание правильных названий критично для успеха. В этой документации будут перечислены основные и самые полезные сервисы, но приводить вообще всё не имеет смысла — пакет NuGet EyeAuras.SDK содержит полный список того, что доступно и может использоваться в ваших скриптах.
Если бы каждый программист каждый раз начинал с нуля, человечество до сих пор коллективно изобретало бы колесо. Поэтому скрипты полностью поддерживают внешние пакеты. В инфраструктуре .NET почти всё хранится в NuGet — и официальные, и неофициальные библиотеки.
Существует множество подборок полезных пакетов; начать можно, например, с этой. В скриптах можно подключить почти любой из них. Сейчас ещё есть некоторые исключения, но работа над этим продолжается.
February 20, 2024
На данный момент поддержка внешних библиотек включена только для alpha testers. Когда эта функциональность станет стабильнее, она будет доступна всем остальным. Я ожидаю, что эти ограничения будут сняты в начале или середине марта.