- Захватывает небольшую область экрана и проверяет цвета пикселей (обнаруживает зеленую/красную «панель сигнала»).
- Если сигнал обнаруживается, он отправляет щелчок мышью в настроенную точку экрана покупки/продажи с помощью CoreGraphics события.
- Щелчки мыши происходят правильно, когда я публикую щелчок мыши CGEvent.
- Это работает без какой-либо инверсии оси Y (что заставляет меня думать, что моя «система координат щелчка» уже правильная).
- Приложение имеет разрешение специальных возможностей (для управления мышью) и разрешение записи экрана (для захвата экран).
Мой захват иногда возвращает изображение обоев/фона рабочего стола, как будто он захватывает то, что находится за видимым окном TradingView (Chrome), а не пиксели, которые видит пользователь.
Когда это происходит:
- Моя выборка пикселей всегда сообщает об отсутствии сигнала, поскольку вместо сигнала выполняется выборка цветов обоев панель.
- Это происходит даже тогда, когда Chrome/TradingView явно находится на переднем плане и виден на экране.
Если бы это была только проблема с переворотом/смещением координат, я бы ожидал, что снимок покажет неправильную часть окна TradingView, а не рабочий стол за ним. Это заставляет меня задаться вопросом, вызвано ли это:
- поведением разрешений macOS,
- компоновкой окон или рендерингом с ускорением графического процессора в Chrome
- или использованием неправильного API для «захвата того, что видит пользователь».
Код: Выделить всё
// Rect is intended to be in global screen coordinates
var rect = new CGRect(x, y, width, height);
// Capture an on-screen image for that rect
using var img = CGWindowList.CreateImage(
rect,
CGWindowListOption.OnScreenOnly,
CGWindowID.Null,
CGWindowImageOption.Default
);
// Save debug image to confirm what was captured
if (img == null)
{
Console.WriteLine("Capture returned null");
}
else
{
SaveToPng(img, "debug.png");
}
- При каких условиях CGWindowListCreateImage / CGWindowList.CreateImage(...) вернет рабочий стол/фон за видимыми окнами даже с OnScreenOnly?
- Известно ли это ограничение для Chrome/контента с ускорением на графическом процессоре (TradingView), где Захват CoreGraphics не возвращает составные пиксели?
- Каков современный подход к захвату реальных видимых пикселей экрана в macOS (например, следует ли вместо этого использовать ScreenCaptureKit)?
- Если CGWindowListCreateImage может работать здесь, какие флаги/параметры или преобразования координат необходимы для этого надежный?
Подробнее здесь: https://stackoverflow.com/questions/798 ... d-of-visib
Мобильная версия