Есть игра, называется World of Warcraft... При запуске игры запрашивается логин и пароль, логин можно указать в конфиг файле и при запуске он уже будет введен в поле "логин", так же есть второе поле "пароль", так вот пароль нельзя записать в конфиг файл и приходится вводить(заполнить это поле с помощью SendMessage не составляет труда), тут начинаются проблемы...
Сначала нужно запустить игру, затем дождаться момента когда появятся поля для заполнения, поля появляются с задержкой, у всех задержка разная т.к. мощность системы тоже разная.
Если вводить пароль до появления поля, то он банально не вводится(и это логично), либо вводится частично.
Вопрос таков. Как определить тот момент, когда поле уже появилось?
Этот топик читают: Гость
Ответов: 327
Рейтинг: 5
|
|||
карма: 0 |
|
Ответов: 1328
Рейтинг: 69
|
|||
knoot0279, например раз в сек с помощью SendMessage пытаться получить "логин" при получении вставлять пароль..
|
|||
карма: 2 |
|
Ответов: 327
Рейтинг: 5
|
|||
спасибо, попробую
------------ Дoбавленo в 10.54: Что-то я запутался с wm_keydown...
В коде выше, пытаюсь нажать таб и ничего не происходит, только вижу секундную задержку при нажатии кнопки "таб" на клавиатуре. А с энтером вообще интересно получается... так же наблюдается задержка, но, после нажатия вручную, получаю окно с предупреждением "введите логин"(это нормально, поле логин пустое), и если я закрываю окно при помощи "esc" или нажатием мыши на кнопку "ок", то он заново открывает окно, то есть он сам нажимает энтер. З.Ы. стоит бесконечный цикл на "sendmessage". почему он нажимает энтер только после моего нажатия? |
|||
карма: 0 |
|
Ответов: 1343
Рейтинг: 31
|
|||
Konst писал(а): например раз в сек с помощью SendMessage пытаться получить "логин" при получении вставлять пароль..бред и ненужный мусор... делай всё через MEMPATCH и не надо никаких мессиджей и прочих соплей... просто находишь все адреса до загрузки и после загрузки, закр. игру опять откр. опять отсеиваешь итд пока не найдёшь то самое... и аналогично с текстом... пишешь текст отвеиваешь меняешь отсеиваешь итд ну и как бы не будет соплей всяких, а будет уже чётко всё. |
|||
карма: 2 |
|
Ответов: 327
Рейтинг: 5
|
|||
Как с этим вообще работать? Как это помочь мне может?
|
|||
карма: 0 |
|
Ответов: 1058
Рейтинг: 76
|
|||
knoot0279 писал(а): приходится вводить(заполнить это поле с помощью SendMessage не составляет трудаknoot0279 писал(а): Как определить тот момент, когда поле уже появилосьknoot0279 Не вникая в суть проблемы... Ваша логика со стороны смотрится весьма странной Если нет проблем с помощью SendMessage заполнить поле, то почему для Вас проблематично, с помощью того же SendMessage, проверить наличие(доступностьвидимость и прочее) нужного поля ввода? Чтобы заполнить поле ввода нужно найти его handle, соответственно если не удалось найти handle значит поле ввода еще не появилось. knoot0279 писал(а): Как с этим вообще работать? Как это помочь мне может?Rysik намекает что можно редактировать данные непосредственно в памяти. Также для начала любым удобным софтом найти нужный адрес, а далее с помощью MEMPATCH по найденному адресу внести необходимые правки. |
|||
карма: 0 |
|
Ответов: 327
Рейтинг: 5
|
|||
tom-it писал(а): Если нет проблем с помощью SendMessage заполнить поле, то почему для Вас проблематично, с помощью того же SendMessage, проверить наличие(доступностьвидимость и прочее) нужного поля ввода?Я не могу заставить его нажимать такие кнопки как : Tab Ctrl+C Enter |
|||
карма: 0 |
|
Ответов: 1058
Рейтинг: 76
|
|||
knoot0279 писал(а): Я не могу заставить его нажимать такие кнопки какОпишите более понятно что, как и для чего делаете. [offtop]мысли вслух Если Вы отправляете SendMessage, значит Вам известно handle формы с полями ввода. Далее ищем дочерние окна, тоесть нужное поле ввода и кнопку. Если для поиска нету отличительных признаков (одинаковые ClassName, Caption и пр.), используем относительные координаты элементов. Далее отправляем пароль и нажатие кнопки. И не понятно для чего knoot0279 писал(а): TabCtrl+C Enter |
|||
карма: 0 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Возможно, окно не в фокусе (перед посылкой команд вывести окно на передний план).
|
|||
карма: 26 |
|
Ответов: 327
Рейтинг: 5
|
|||
Netspirit писал(а): Возможно, окно не в фокусеОкно в любом случае в фокусе т.к. игра была только что запущена. Netspirit писал(а): Опишите более понятно что, как и для чего делаете.При запуске игры поле "логин" заполнено и поэтому фокус автоматически переключается на поле "пароль" нажатием Tab'а я хочу вернуть фокус на первое поле, после чего копировать текст(Ctrl+C) и проверить равен ли он тому, чего я ожидаю(а ожидаю я совпадения с известным мне логином, ибо если поля не появились, то он и не скопирует). Хотя сейчас подумав... комбинация Ctrl+C ведь скопирует в буфер обмена, не так ли?(хотя можно записать старое значение, проверить логин и вернуть старое...) В общем нужно каким то образом определить содержимое первого поля. Менять данные в буфере не желательно. А Enter мне нужен для того, чтобы войти(присутствует кнопка "войти", нажатие кнопки Enter равносильно клику на кнопку "войти") |
|||
карма: 0 |
|
Ответов: 4630
Рейтинг: 749
|
|||
knoot0279 писал(а): определить содержимое первого поля |
|||
карма: 26 |
|
Ответов: 327
Рейтинг: 5
|
|||
Почему в InlineCode?
|
|||
карма: 0 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Можешь попробовать WinTools.CaptionText, но он использует GetWindowText, а в MSDN пишут, что не удастся получить текст Edit-а из другого процесса.
|
|||
карма: 26 |
|
Ответов: 327
Рейтинг: 5
|
|||
tom-it писал(а): Далее ищем дочерние окна, тоесть нужное поле ввода и кнопку.Если я правильно понимаю... вы предлагаете перебором дочерних окон найти поля и кнопку, так? У меня получилось следующее
Ну, то есть главное он находит, а дочерние нет |
|||
карма: 0 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Если взять результат с 3-ей точки MT_MultiData в обход IC, то текст Edit-ов будет выдавать пустой. [offtop]А WinTools.CaptionText можно переделать на использование этого метода...[/offtop] |
|||
карма: 26 |
|