Как программно взаимодействовать с приложением

Скорее всего, скоро я буду работать над несколькими проектами, в которых мне нужно будет взять данные из файла и программно ввести эти данные в другое стороннее (не мое собственное) приложение. Одна проблема: я понятия не имею, как это сделать. Мне нужно будет ввести данные (например, время в табеле учета рабочего времени). Может ли кто-нибудь направить меня в правильном направлении для приобретения этого навыка?

ДОПОЛНИТЕЛЬНЫЕ ХАРАКТЕРИСТИКИ: я написал исходный пост поздно ночью, поэтому, возможно, он не был таким подробным, как должен. Вот пример: у моего клиента есть приложение ERP, которое он использует для сбора отметок времени от линейных рабочих, когда они выполняют свою работу и выносят проекты за дверь в течение дня. У этого приложения НЕТ API, который я могу использовать для ввода данных. Я слышал о парне, который мог программно выводить данные на экран в окнах и элементах управления этого приложения, так что данные можно было собирать, скажем, в лист Excel, а затем эффективно загружать в это приложение. Этакий реверс экрана-царапины. Это не очень похоже на API, но работает.

Я видел, как приложение взаимодействует с другими приложениями аналогичным образом. Я могу вспомнить один хороший пример - SnagIt, утилиту для создания снимков экрана. Вы можете приказать ему сделать снимок экрана в конкретном приложении, и, когда вы перемещаете указатель мыши по этому окну, элементы управления под указателем будут выделены красным, чтобы указать, какой элемент управления он будет захватывать для вас. Я думаю, что это интересно, и, вероятно, всего в одном шаге от возможности набрать текст в для такого элемента управления.

Спасибо за комментарии и ответы, я преследую их все.

Вы хотите программно вводить данные в графический интерфейс стороннего приложения?

Artelius 05.01.2009 11:57

@Mike: Может, нужно уточнить ваши требования ...

Mitch Wheat 05.01.2009 11:58

Ответ Фредерика хорош, но, как говорит Митч, вопрос требует более строгих требований.

kenny 05.01.2009 15:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
3
9 233
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Различные приложения позволяют управлять ими программно по-разному. Два наиболее распространенных подхода:

1) Некоторые приложения предоставляют аргументы командной строки. Пример:

c:\> someapp.exe arg1 arg2

Вы можете вызывать такие приложения из программы на C++ с помощью такого вызова:

System("C:\\>someapp.exe arg1 arg2");

2) Другие приложения могут предоставлять гораздо более мощные объектно-ориентированные API. Например, Microsoft Excel позволяет вам программировать его, используя само приложение как объект в вашей программе на C#:

Excel.Application excelApp = new Excel.App()

Когда у вас есть объект приложения, вы можете вызывать для него методы для управления его поведением. Вы можете, например, открыть новый файл Excel с последующим вызовом следующим образом:

excelApp.Workbooks.Open("\\Somefile.xls", ...);

Для любого стороннего приложения, которым вы пытаетесь управлять, вам нужно будет прочитать его документацию о том, как оно позволяет вам это делать. Информацию о том, как программировать Excel, например, можно найти в здесь.

Однажды я сделал что-то подобное, когда приложение Windows управлялось веб-приложением. Для этого я использовал много Win32 API. Если ваше приложение похоже, то для начала поищите пульт дистанционного управления Winamp с открытым исходным кодом.

Это может быть очень сложно, если приложение не предназначено для взаимодействия. Вам нужно будет отправлять фиктивные события (например, чтобы сделать вид, будто мышь выполняет определенные действия). Один из способов сделать это - написать драйвер мыши, который не подключается к настоящей мыши. Но, как я уже сказал, это зависит от приложения. Приложения с более крупной базой пользователей часто имеют API-интерфейсы для программного взаимодействия или встроенные возможности сценариев (так что вы можете вроде как заставить приложение использовать ваш код).

Я думаю, что FindWindow и Отправить сообщение - это функции, которые вы хотите использовать в целом.

Или, если вы хотите быть еще более «хакерским», начните читать память программы и напрямую вводите данные. :П

Но это может быть очень сложно и часто вообще не работает из-за того, как программа использует память.

Это не самый красивый способ сделать это, но я видел некоторые приложения, которые используют буфер обмена для подобных вещей. К сожалению, это, вероятно, также потребует ручного вмешательства, поскольку у вас, вероятно, нет способа заставить приложение программно извлекать / передавать в буфер обмена.

Ответ принят как подходящий

Возможно, вы сможете автоматизировать это с помощью сценария AutoIt. Это простой язык сценариев, который скрывает некоторые сложности отправки сообщений окнам и элементам управления.

Это похоже на то, что я имел в виду. Удивительно, но это бесплатное ПО! Если это сработает так, как я надеюсь, пожертвование будет в порядке.

Mike K 06.01.2009 10:43

Другие вопросы по теме