Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача текста другому приложению 
:(
    Опции темы
AndreyZ53
Дата 26.10.2016, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 22.8.2008

Репутация: нет
Всего: 2



Здравствуйте!
Есть задача, необходимо передать текст в другое приложение. В общем надо заполнить форму ввода логина и пароля в сторонней программе. То есть, сначала надо вставить логин в поле логин, а затем вставить пароль в поле пароль (перед этим TAB-ом необходимо перейти на поле).

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

Может кто подскажет, как реализовать, мне без разницы: эмуляция нажатия клавиши, вставка из буфера, главное чтобы проблема решалась хоть как
--------------------
https://itbases.ru/
PM MAIL WWW Skype   Вверх
kami
Дата 28.10.2016, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



в отличие от "православных" виндовых приложений, java -приложение не имеет ничего типа контролов-полей ввода и т.п. По сути java-приложение это одно окно (общее) а всё остальное (включая поля ввода) - просто нарисованная на нем картинка. Поэтому SendMessage вряд ли сработает. Попробуйте использовать более низкоуровневый SendInput.
PM MAIL WWW   Вверх
AndreyZ53
Дата 31.10.2016, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 22.8.2008

Репутация: нет
Всего: 2



kami, Спасибо за помощь

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

С Java-приложениями только так, поэтому кто будет ломать голову, то делайте сразу эмуляцию нажатия клавиш, как сказал товарищ kami, у приложении Java нет контролов, одно главное окно, это можно посмотреть, например при помощи Microsoft Spy++ и сравнить приложение Java и тот же Блокнот.
--------------------
https://itbases.ru/
PM MAIL WWW Skype   Вверх
kami
Дата 4.11.2016, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Цитата(AndreyZ53 @  31.10.2016,  13:27 Найти цитируемый пост)
при помощи процедуры keybd_event

Зря. Она устарела и не рекомендуется к использованию. Ее заменила как раз рекомендованная вам SendInput.
PM MAIL WWW   Вверх
Poseidon
Дата 8.11.2016, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(kami @  28.10.2016,  20:33 Найти цитируемый пост)
java -приложение не имеет ничего типа контролов-полей ввода и т.п. По сути java-приложение это одно окно (общее) а всё остальное (включая поля ввода) - просто нарисованная на нем картинка. 
kami, я чисто для себя, любопытно просто, как тогда java -приложение разруливает в какую часть этой картинки необходимо писать текст?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
kami
Дата 8.11.2016, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Цитата(Poseidon @  8.11.2016,  10:26 Найти цитируемый пост)
 как тогда java -приложение разруливает в какую часть этой картинки необходимо писать текст? 

Так же, как в 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
PM MAIL WWW   Вверх
Poseidon
Дата 11.11.2016, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(kami @  8.11.2016,  22:41 Найти цитируемый пост)
При работе под Windows - все сообщения получает сама форма (больше их и получать некому - ни у кого виндового хендла нет), а дальше транслирует их (преобразованные во "внутренние" платформонезависимые структуры) в нужный объект.

Это все понятно, но ведь при получении Win-сообщения окном Java (и FireMonkey) знают же по каким координатам и что писать. Это явно передается в сообщении. Почему бы не сэмулировать подобное сообщение и не "сказать" Java, что "вот в твоем окне вот по таким вот координатам надо написать вот это". Windows же это как-то делает, и делает это явно через WinMessages.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
kami
Дата 11.11.2016, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Цитата(Poseidon @  11.11.2016,  18:04 Найти цитируемый пост)
Это явно передается в сообщении. Почему бы не сэмулировать подобное сообщение и не "сказать" Java, что "вот в твоем окне вот по таким вот координатам надо написать вот это"

Вообще-то да... Послать WM_KEYXXX  ума много не надо smile Но, мы же не видим код автора, может он просто не то окно нашел... Лень экспериментировать, отошел я от winapi в последнее время...
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1257 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.