Как получать данные с десктопного приложения Windows (works via inet) в реальном времени?
Надо считывать данные с десктопного приложения (Windows) в реальном времени. Приложение работает через интернет, данные динамично меняются. Цель - получение нужных данных для сторонней программы. Приложений много - игровые, биржевые и тд.
Как это лучше всего реализовать? На каком языке? Писать под каждое приложение отдельный код? Или есть вариант с машинным обучением, возможно ли качественно обучить машину распознавать одни и те же действия в разных приложениях?
Если само приложение не умеет отдавать данные, то получить их, тем более через сеть, будет затруднительно.
Если приложение это умеет делать, то есть куча способов как это можно сделать, один из многих вариантов - обмен через сеть (интернет).
Если приложение отдает данные через сеть, то есть куча протоколов, которые можно использовать для этих целей, в т.ч. возможен вариант какого-то собственного закрытого протокола, который кроме как в этом приложении нигде не используется.
Нужно смотреть каждое конкретное приложение, читать его мануалы на предмет обмена с ним данными.
Не думаю, что можно решить эту задачу в общем случае каким-то универсальным способом.
Windows - не система реального времени, Интернет - еще больше не система реального времени. В обоих случаях возможны не предсказуемые задержки по независящим от участников обмена причинам.
Данные в целевых приложениях - где и в каком виде?
Откуда их считать есть задача?
Это
а) Данные на экране, которые надо передать другой программе?
б) Данные в log-файлах?
в) В какой-то собственной дазе банных у приложения? :)
г) Данные в оперативной памяти?
Если на экране (а) - можно строить цепочку скриптов:
захват кадров - выделение ключевых областей (ручное, в процессе разметки) - распознание/OCR текста в этих областях...
Komrus, Ответы:
а) Да, все верно, данные с экрана которые мы видим глазами, надо передавать другой проге в реальном времени.
б-в-г) Скорее всего приложение записывает данные в каком то файле в своей папке на компе, надо найти и понять как читать это данные.
Судя по вашему ответу чуть выше я задачу понял правильно.
Разве что в вопросе не указывалось, что приложение пишет файлы.
Но с файлами то же все может быть не просто, даже если вы получите доступ на чтение файлов удаленно (это отдельная задача похожая на взлом компьютера, если доступ для вас не открыт).
Файлы могут быть записаны в разных форматах, форматы могут быть текстовые и двоичные. Какие-то форматы могут быть известны JSON, dbf, wav и т.п., другие могут быть произвольного формата, который знает только пишущая их программа. Для файлов известного формата можно поискать готовые библиотеки с помощью которых можно читать эти файлы. Так же возможны варианты, что файл заблокирован приложением для чтения его другим приложением, например так делают разные СУБД со своими базами, и пока приложение не закроет файл прочитать его будет не возможно.
Так что и тут вам не грозит универсальное решение.
Из игр получать данные только через чтение памяти и перехват трафика драйвером в ядре ОС. В остальных приложениях всё зависит от конкретного приложения: в случае классических оконных приложений все данные из окон считываются через стандартные системные оконные API вызывы. Во всех остальных приложениях - индивидуально для каждого приложения. Реверсинг приложения, исследование его работы и реализация соответствующего решения. После каждого обновления приложения - доработки под новые изменения. При кардинальном обновлении приложения - полное переписывание решения.
Как это лучше всего реализовать?
Лучше для чего именно?
На каком языке?
С/С++ и ассемблер.
Писать под каждое приложение отдельный код?
Да.
Или есть вариант с машинным обучением, возможно ли качественно обучить машину распознавать одни и те же действия в разных приложениях?