Передача текста другому приложению

 
0
 
Delphi, Kylix & Pascal
ava
AndreyZ53 | 26.10.2016, 15:46
Здравствуйте!
Есть задача, необходимо передать текст в другое приложение. В общем надо заполнить форму ввода логина и пароля в сторонней программе. То есть, сначала надо вставить логин в поле логин, а затем вставить пароль в поле пароль (перед этим TAB-ом необходимо перейти на поле).

Все хорошо вроде бы у меня получается через SendMessage, в блокноте все отлично работает во всех Windows окнах, но вот как только дело доходит до приложения, написанного на Java, то все, ничего не происходит.
в Панеле управления имеется пункт Java, так вот открываю его делаю активным какое-нибудь текстовое поле и ничего не происходит, а вот в блокноте том же самом все замечательно.

Может кто подскажет, как реализовать, мне без разницы: эмуляция нажатия клавиши, вставка из буфера, главное чтобы проблема решалась хоть как
Kommentare (7)
ava
kami | 28.10.2016, 20:33 #
в отличие от "православных" виндовых приложений, java -приложение не имеет ничего типа контролов-полей ввода и т.п. По сути java-приложение это одно окно (общее) а всё остальное (включая поля ввода) - просто нарисованная на нем картинка. Поэтому SendMessage вряд ли сработает. Попробуйте использовать более низкоуровневый SendInput.
ava
AndreyZ53 | 31.10.2016, 13:27 #
kami, Спасибо за помощь

Проблему решил при помощи эмуляции нажатия клавиш, при помощи процедуры keybd_event

С Java-приложениями только так, поэтому кто будет ломать голову, то делайте сразу эмуляцию нажатия клавиш, как сказал товарищ kami, у приложении Java нет контролов, одно главное окно, это можно посмотреть, например при помощи Microsoft Spy++ и сравнить приложение Java и тот же Блокнот.
ava
kami | 04.11.2016, 23:18 #
Цитата (AndreyZ53 @  31.10.2016,  13:27 findReferencedText)
при помощи процедуры keybd_event

Зря. Она устарела и не рекомендуется к использованию. Ее заменила как раз рекомендованная вам SendInput.
ava
Poseidon | 08.11.2016, 10:26 #
Цитата (kami @  28.10.2016,  20:33 findReferencedText)
java -приложение не имеет ничего типа контролов-полей ввода и т.п. По сути java-приложение это одно окно (общее) а всё остальное (включая поля ввода) - просто нарисованная на нем картинка. 
kami, я чисто для себя, любопытно просто, как тогда java -приложение разруливает в какую часть этой картинки необходимо писать текст?
ava
kami | 08.11.2016, 22:41 #
Цитата (Poseidon @  8.11.2016,  10:26 findReferencedText)
 как тогда java -приложение разруливает в какую часть этой картинки необходимо писать текст? 

Так же, как в Delphi это делается на фреймворке FMX, он же FireMonkey. То же самое - все стилизованные контролы это просто рисунки на канве самой формы. При работе под Windows - все сообщения получает сама форма (больше их и получать некому - ни у кого виндового хендла нет), а дальше транслирует их (преобразованные во "внутренние" платформонезависимые структуры) в нужный объект.

Ну а теперь честно - не вникал, посему толком не знаю. Но (основываясь на том, что знаю из FMX) - там очень широко используются функции а-ля ControlAtPos(x,y), GetNextTabControl - "типа у кого следующий TabOrder", GetActiveControl с учетом всяческих (тоже самостоятельно реализованных) ZOrder, Visible, Enabled и т.п. При нормальной реализации - действует практически не хуже нативных контролов (понятно, что с ограничениями). К примеру для TMemo в FMX "нормально" стало только с XE8.
ava
Poseidon | 11.11.2016, 18:04 #
Цитата (kami @  8.11.2016,  22:41 findReferencedText)
При работе под Windows - все сообщения получает сама форма (больше их и получать некому - ни у кого виндового хендла нет), а дальше транслирует их (преобразованные во "внутренние" платформонезависимые структуры) в нужный объект.

Это все понятно, но ведь при получении Win-сообщения окном Java (и FireMonkey) знают же по каким координатам и что писать. Это явно передается в сообщении. Почему бы не сэмулировать подобное сообщение и не "сказать" Java, что "вот в твоем окне вот по таким вот координатам надо написать вот это". Windows же это как-то делает, и делает это явно через WinMessages.
ava
kami | 11.11.2016, 21:28 #
Цитата (Poseidon @  11.11.2016,  18:04 findReferencedText)
Это явно передается в сообщении. Почему бы не сэмулировать подобное сообщение и не "сказать" Java, что "вот в твоем окне вот по таким вот координатам надо написать вот это"

Вообще-то да... Послать WM_KEYXXX  ума много не надо :) Но, мы же не видим код автора, может он просто не то окно нашел... Лень экспериментировать, отошел я от winapi в последнее время...
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden