получить hwnd контрола
мне нужно получить хэндл контрола в сторонних приложениях. с помощью функции getFocus я получаю хэндл фокуса и, соответственно, нужного контрола, который мне нужен. но это получается не всегда... есть одно приложение для которого этот способ не срабатывает: вместо хвнд контрола получается только хвнд всего окна. приложение это написано на джаве. знакомые сказали, что ничего не получается скорее всего из-за того, что контролы в этом джава-приложении ненативные...
в целом, у меня задача вствить текст в тектбокс стороннего приложения, и для этого я получаю хэндл контрола для вставки....
в общем, getfocus не работает для некоторого приложения. как эту проблему можно решить? возможно есть какая-то другая функция для этой цели?
заранее спасибо.
если ничего не найдет - тоды ой
есть варианты как вставить нужный мне текст в ненативный тектсбокс стороннего java-приложения не зная его хвнд? причем текст для вставки постоянно обновляется... это сделать можно, но пока непонятно как...
диагноз - надо копаться непосредственно в памяти и там менять...
в целом, у меня задача вствить текст в тектбокс стороннего приложения, и для этого я получаю хэндл контрола для вставки....
в общем, getfocus не работает для некоторого приложения. как эту проблему можно решить? возможно есть какая-то другая функция для этой цели?
Не понимая ничегошеньки в Джаве, всё же рискну предложить вариант, который я использовал в похожей, но правда, в Делфийской сборке: попытки передавать некоторый текст в другие приложения системы с помощью различных эйпиа`шных функций частично привели к провалу - в Блокнот ещё это делать удавалось, а например, в Ворд (хендлы окошек спрятаны вложением ядром офиса) уже ни как. Встал вопрос - что делать? Получился немного кривоватый, но всё таки рабочий способ - использовать буфер обмена оськи. Сначало копируется нужный текст в буфер (надо предусмотреть сохранение, а после и возврат его содержимого), затем устанавливается фокус нужному текстбоксу и вставляется текст из буфера. Можно это делать и виртуально, "без рук". Для примера, данная процедура программно "нажимает" на Ctrl и V, т.е. производит вставку текста из буфера обмена Виндовс:
begin
keybd_event(VK_CONTROL, 0,KEYEVENTF_EXTENDEDKEY, 0);//нажимаем
keybd_event(86,0,KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_CONTROL, 0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);//отпускаем
keybd_event(86,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); inc(YetEvent);
end;
Единственный минус - фокус на компоненте должен быть всегда, при его потере, это работать не будет. Мне это было не нужно, так что как отследить и удержать фокус, к сожалению, не знаю.
Функция keybd_event -- устаравший и ненадёжный способ в Windows. Как правильно подсказал в своё время koodeer, лучше пользоваться SendInput-ом, и тогда даже буфер обмена поганить не придётся.
Непосредственно по теме. Давным-давно читал в интернетах, что какая-то оконная библиотека Java (Swing?) всё рисует сама. Соответственно, виндовых control-ов в ней не может быть по определению. Пусть Zorkus скажет.
Аналогичным образом рисуется TLabel в VCL -- у него тоже нет декриптора окна (handle).