|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
|
AndreyZ53 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 138 Регистрация: 22.8.2008 Репутация: нет Всего: 2 |
Здравствуйте!
Есть задача, необходимо передать текст в другое приложение. В общем надо заполнить форму ввода логина и пароля в сторонней программе. То есть, сначала надо вставить логин в поле логин, а затем вставить пароль в поле пароль (перед этим TAB-ом необходимо перейти на поле). Все хорошо вроде бы у меня получается через SendMessage, в блокноте все отлично работает во всех Windows окнах, но вот как только дело доходит до приложения, написанного на Java, то все, ничего не происходит. в Панеле управления имеется пункт Java, так вот открываю его делаю активным какое-нибудь текстовое поле и ничего не происходит, а вот в блокноте том же самом все замечательно. Может кто подскажет, как реализовать, мне без разницы: эмуляция нажатия клавиши, вставка из буфера, главное чтобы проблема решалась хоть как --------------------
https://itbases.ru/ |
|||
|
||||
kami |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
в отличие от "православных" виндовых приложений, java -приложение не имеет ничего типа контролов-полей ввода и т.п. По сути java-приложение это одно окно (общее) а всё остальное (включая поля ввода) - просто нарисованная на нем картинка. Поэтому SendMessage вряд ли сработает. Попробуйте использовать более низкоуровневый SendInput.
|
|||
|
||||
AndreyZ53 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 138 Регистрация: 22.8.2008 Репутация: нет Всего: 2 |
kami, Спасибо за помощь
Проблему решил при помощи эмуляции нажатия клавиш, при помощи процедуры keybd_event С Java-приложениями только так, поэтому кто будет ломать голову, то делайте сразу эмуляцию нажатия клавиш, как сказал товарищ kami, у приложении Java нет контролов, одно главное окно, это можно посмотреть, например при помощи Microsoft Spy++ и сравнить приложение Java и тот же Блокнот. --------------------
https://itbases.ru/ |
|||
|
||||
kami |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
||||
|
||||
Poseidon |
|
|||
Delphi developer Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
kami, я чисто для себя, любопытно просто, как тогда java -приложение разруливает в какую часть этой картинки необходимо писать текст? -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
kami |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Так же, как в Delphi это делается на фреймворке FMX, он же FireMonkey. То же самое - все стилизованные контролы это просто рисунки на канве самой формы. При работе под Windows - все сообщения получает сама форма (больше их и получать некому - ни у кого виндового хендла нет), а дальше транслирует их (преобразованные во "внутренние" платформонезависимые структуры) в нужный объект. Транслированное сообщение доходит до (в терминах FireMonkey) TEdit, а он уже вызывает платфорозависимую DrawTextW с учетом своих координат, ширины/высоты, TFont и т.п.. В общем и целом - внутри приложения объекты, реализующие внешний вид и поведение кнопок/полей ввода, etc, есть. А с точки зрения ОС - есть только один визуальный объект - сама форма. Ну а теперь честно - не вникал, посему толком не знаю. Но (основываясь на том, что знаю из FMX) - там очень широко используются функции а-ля ControlAtPos(x,y), GetNextTabControl - "типа у кого следующий TabOrder", GetActiveControl с учетом всяческих (тоже самостоятельно реализованных) ZOrder, Visible, Enabled и т.п. При нормальной реализации - действует практически не хуже нативных контролов (понятно, что с ограничениями). К примеру для TMemo в FMX "нормально" стало только с XE8. Это сообщение отредактировал(а) kami - 8.11.2016, 23:37 |
|||
|
||||
Poseidon |
|
|||
Delphi developer Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Это все понятно, но ведь при получении Win-сообщения окном Java (и FireMonkey) знают же по каким координатам и что писать. Это явно передается в сообщении. Почему бы не сэмулировать подобное сообщение и не "сказать" Java, что "вот в твоем окне вот по таким вот координатам надо написать вот это". Windows же это как-то делает, и делает это явно через WinMessages. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
kami |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Вообще-то да... Послать WM_KEYXXX ума много не надо Но, мы же не видим код автора, может он просто не то окно нашел... Лень экспериментировать, отошел я от winapi в последнее время... |
|||
|
||||
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |