OSD-отрисовка курсора
Отрисовка курсора в OSD
Отрисовка курсора на экране через OSD API EyeAuras
Этот скрипт показывает, как нарисовать небольшой прямоугольник вокруг курсора мыши, который обновляется в реальном времени, с помощью On-Screen Display (OSD) API в EyeAuras. Для этого используется API IOnScreenCanvas, которое динамически рендерит overlay-элемент и заставляет его следовать за курсором.
Обзор API
EyeAuras предоставляет scripting API для создания лёгких визуальных элементов поверх экрана.
С помощью этих API можно создавать, изменять и удалять лёгкие экранные overlay-элементы. Это удобно для HUD-индикаторов, отслеживания UI-элементов, отладочных помощников и маркеров курсора.
Пример: зелёный прямоугольник вокруг курсора
Создайте действие C# Script в desktop EyeAuras и запустите его. Нужен
OSD-модуль с Blazor/WebView. Пока скрипт работает, рамка 10×10 следует
за курсором в экранных координатах; остановите скрипт, чтобы убрать её.
Обычный C# класс должен получить фабрику canvas и токен от владельца.
using System.Drawing;
using EyeAuras.Shared.Scripting;
using EyeAuras.Blazor.Controls.ScreenOverlay;
{
using var canvas = GetService<IOnScreenCanvasScriptingApi>().Create();
try
{
Log.Info("Booting up OSD");
using var cursorBox = canvas.AddRectangle();
cursorBox.Size = new Size(10, 10);
cursorBox.Background = Color.Transparent;
cursorBox.BorderThickness = 2;
cursorBox.BorderColor = Color.Green;
while (!cancellationToken.IsCancellationRequested)
{
var cursor = System.Windows.Forms.Cursor.Position;
cursorBox.Location = new Point(cursor.X - 5, cursor.Y - 5);
Sleep(16); // пауза хоста учитывает отмену скрипта
}
}
finally
{
canvas.Clear(); // пока proxy ещё передаёт удаление общему canvas
Log.Info("OSD routine has stopped");
}
}
Что здесь происходит
canvas.AddRectangle()создаёт новый прямоугольный overlay-объект.- Для прямоугольника задаются:
- прозрачный фон
- зелёная рамка (
2px) - фиксированный размер (
10x10)
- В каждой итерации цикла позиция обновляется так, чтобы совпадать с положением курсора и оставаться по центру за счёт вычитания
5из обеих координат. - При выходе из блока
usingосвобождается прямоугольник, затемfinallyочищает canvas до освобождения самого canvas.
Remove и Clear убирают регистрации, но не заменяют освобождение объектов.
Один canvas.Dispose() в этом срезе не гарантирует удаления всех детей.
Общее окно может оставаться у других пользователей; реализация использует
основной монитор, поэтому не обещает покрытие всех мониторов или DPI.
Подробнее — владение OSD-объектами.
Полезные советы
Sleep(16)в цикле ограничивает частоту обновления примерно 60 итерациями в секунду; фактическая частота отрисовки зависит от хоста.- Если нужен заполненный маркер, используйте
.WithBackground(Color.FromArgb(...)). - Для отладки расположения overlay-элементов можно вызвать
canvas.ShowDevTools()и посмотреть интерфейс вживую.