| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Эмулирование действия пользователя |
| Автор: Prospekt 22.12.2012, 09:53 |
| Задача для меня очень необычная, подозреваю, что решения может и не быть. Есть программа, написаная не мной, скорее всего на Delphi (или CBuilder). Мне требуется сделать надстройку над этой программой, не перекомпилируя её. Что должна делать программа: 1) считывать данный из Label, расположение на экране которых известно и постоянно. 2) отправлять сообщения нажатия кнопок (расположение которых тоже известно). Как подойти к этой задаче? Просто её интерфейс очень неудобен, данные представлены в том виде, в котором их неудобно обрабатывать, плюс необходимо постоянно иметь несколько сложных условий (критериев) построенных на этих даных. Да и ко всему ещё есть отрезки времени, когда от пользователя требуется примитивная реакция (если больше жмем на одну кнопку, если меньше на другую), так что хотелось бы построить некий автопилот для таких отрезков. Почему я думаю, что эта задача может иметь решение? Есть такая программа как героекополка (для Heroes 3), которая автоматичеки загружает сейф, покупает в таверне героя, и если новый герой (на месте купленного) не тот, который нужен, происходит опять загрузка сейфа и т.д. |
| Автор: DarkProg 22.12.2012, 13:08 | ||
| Для этого вам нужно отправить "другой" програмке соответствующее сообщение используя функцию SendMessage http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644950(v=vs.85).aspx. Координаты мыши узнать легко, а вот нажатие левой кнопки мыши выполняется вот так.
WinAPI одинаково на всех языках, так что примеры можете смотреть на любом языке, суть от этого не меняется. Главное понимать что искать. Удачи. |
| Автор: Prospekt 23.12.2012, 12:59 |
| Спасибо за ответы. Я сделал так: 1) Сначало вывел список всех окон, и среди них нашел нужное окно типа MainForm. 2) Путем рекурентного поиска выводил все подокна для даного окна. Таким образом вывел дерево графических объектов для начального окна. Но тут загвоздка, FindWindowEx() принципиально не хочет находить Label, а именно они мне очень нужны. Почитал немного, оказалось, что Label - это типа как и не окно (вобщем Гейтс и здесь кинул), и таким образом получить handle не получится. И что делать? Должен же быть какой-то способ добраться до этих Label. Как это сделать своими силами разобраться не могу. Пардон, это уже другая тема, поэтому создам тему в соотвествующей ветке форума. |