Russian Qt Forum

Qt => Общие вопросы => Тема начата: arhiv6 от Сентябрь 07, 2015, 22:02



Название: [Решено] Доступ к элементам чужого окна
Отправлено: arhiv6 от Сентябрь 07, 2015, 22:02
Добрый день. Есть сторонняя программа, представляющая из себя форму с несколькими текстовыми полями. Хочется получить доступ к этим текстовым полям (прочитать их) из своей программы (написанной на Qt), чтобы дальше эти данные обрабатывать. Сейчас приходится вручную в каждом поле выделить текст, скопировать и вставить в соответствующее поле на своей форме. Это долго и неудобно, хочется автоматизировать. Вроде можно это сделать с помощью AutoIt, но прежде чем приступить к изучению его basic-подобного языка решил узнать поспрашивать на этом форуме:
Можно ли в Windows получить доступ из своей программы к элементам чужого окна без использования стороннего софта (вроде AutoIt)?


Название: Re: Доступ к элементам чужого окна
Отправлено: Пантер от Сентябрь 07, 2015, 22:08
Можно. Если Винда, то на ВинАПИ. Погугли про убегающую кнопку Пуск. :)


Название: Re: Доступ к элементам чужого окна
Отправлено: Bepec от Сентябрь 07, 2015, 22:21
Это зависит от программы, с которой вы хотите снять информацию. Если там делфячий или виндосовские контролы - да, можно. Если там что то типо Qt - придётся вам извращаться с AutoIt.

Как проверить? Взять утилиту Spy x32 или x64 под вашу систему и потыкать прицелом в текстовые поля. Если они как различные контролы отображаются - значит всё гуд, можно изучать winapi. Если же там везде тыкается главное окно программы, значит всё печально => AutoIt


Название: Re: Доступ к элементам чужого окна
Отправлено: Пантер от Сентябрь 09, 2015, 08:14
Это зависит от программы, с которой вы хотите снять информацию. Если там делфячий или виндосовские контролы - да, можно. Если там что то типо Qt - придётся вам извращаться с AutoIt.

Как проверить? Взять утилиту Spy x32 или x64 под вашу систему и потыкать прицелом в текстовые поля. Если они как различные контролы отображаются - значит всё гуд, можно изучать winapi. Если же там везде тыкается главное окно программы, значит всё печально => AutoIt
Вроде же в Qt5 контролы имеют свои виндовые хендлы, не?


Название: Re: Доступ к элементам чужого окна
Отправлено: Bepec от Сентябрь 09, 2015, 08:17
Хз, надо проверить, но в версиях 4.* данные достать нереально. Всё окно представляет собой фанеру.

PS да и по идее сам механизм рисования делает невозможным использование виндосовских контролов. Надо уточнить.


Название: Re: Доступ к элементам чужого окна
Отправлено: Пантер от Сентябрь 09, 2015, 08:18
Да, с 4 я согласен, там Кьют сам все рисовал.


Название: Re: Доступ к элементам чужого окна
Отправлено: GreatSnake от Сентябрь 09, 2015, 10:58
Вроде же в Qt5 контролы имеют свои виндовые хендлы, не?
Откуда такие данные?
Вроде как виджеты в Qt5 особенно не переделывались по сравнению с Qt4.
Да по идее и не должны были так кардинально измениться.


Название: Re: Доступ к элементам чужого окна
Отправлено: Пантер от Сентябрь 09, 2015, 11:24
ХЗ. Помню, кто-то говорил мне об этом. Утверждать не буду на 146%.


Название: Re: Доступ к элементам чужого окна
Отправлено: GreatSnake от Сентябрь 09, 2015, 11:40
Имхо, огромный плюс Qt в том, что он сам рисует контролы.
Мало того, что это обеспечивает кросс-платформенность, так и обеспечивает тюнинг через QSS.


Название: Re: Доступ к элементам чужого окна
Отправлено: arhiv6 от Сентябрь 15, 2015, 21:14
Всем спасибо. По совету Пантер реализовал с помощью WinAPI.
Цитировать
Вроде же в Qt5 контролы имеют свои виндовые хендлы, не?
Нет, по крайней мере через Control Viewer (аналог Spy) никакая информация об элементах формы не доступна.


Название: Re: [Решено] Доступ к элементам чужого окна
Отправлено: Bepec от Сентябрь 16, 2015, 01:37
А как реализовал то? Если программа не имела хендлов? :)


Название: Re: [Решено] Доступ к элементам чужого окна
Отправлено: arhiv6 от Сентябрь 20, 2015, 22:33
Цитировать
Нет, по крайней мере через Control Viewer (аналог Spy) никакая информация об элементах формы не доступна.
- это я о своей Qt5 программе.


Название: Re: Доступ к элементам чужого окна
Отправлено: sergek от Сентябрь 21, 2015, 20:41
Всем спасибо. По совету Пантер реализовал с помощью WinAPI.
Вопрос об этом. Главное окно, естественно, ловится. А все контролы внутри - нет.


Название: Re: [Решено] Доступ к элементам чужого окна
Отправлено: Igors от Сентябрь 22, 2015, 10:07
Если нужно автоматизировать copy/paste, то не лучше ли сделать чужому окну нужные move и resize а затем запустить записанный скрипт нажатий мыша и клавы?