Russian Qt Forum
Ноябрь 22, 2024, 23:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Доступ к элементам чужого окна  (Прочитано 9140 раз)
arhiv6
Гость
« : Сентябрь 07, 2015, 22:02 »

Добрый день. Есть сторонняя программа, представляющая из себя форму с несколькими текстовыми полями. Хочется получить доступ к этим текстовым полям (прочитать их) из своей программы (написанной на Qt), чтобы дальше эти данные обрабатывать. Сейчас приходится вручную в каждом поле выделить текст, скопировать и вставить в соответствующее поле на своей форме. Это долго и неудобно, хочется автоматизировать. Вроде можно это сделать с помощью AutoIt, но прежде чем приступить к изучению его basic-подобного языка решил узнать поспрашивать на этом форуме:
Можно ли в Windows получить доступ из своей программы к элементам чужого окна без использования стороннего софта (вроде AutoIt)?
« Последнее редактирование: Сентябрь 15, 2015, 21:16 от arhiv6 » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Сентябрь 07, 2015, 22:08 »

Можно. Если Винда, то на ВинАПИ. Погугли про убегающую кнопку Пуск. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #2 : Сентябрь 07, 2015, 22:21 »

Это зависит от программы, с которой вы хотите снять информацию. Если там делфячий или виндосовские контролы - да, можно. Если там что то типо Qt - придётся вам извращаться с AutoIt.

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Сентябрь 09, 2015, 08:14 »

Это зависит от программы, с которой вы хотите снять информацию. Если там делфячий или виндосовские контролы - да, можно. Если там что то типо Qt - придётся вам извращаться с AutoIt.

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #4 : Сентябрь 09, 2015, 08:17 »

Хз, надо проверить, но в версиях 4.* данные достать нереально. Всё окно представляет собой фанеру.

PS да и по идее сам механизм рисования делает невозможным использование виндосовских контролов. Надо уточнить.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Сентябрь 09, 2015, 08:18 »

Да, с 4 я согласен, там Кьют сам все рисовал.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Сентябрь 09, 2015, 10:58 »

Вроде же в Qt5 контролы имеют свои виндовые хендлы, не?
Откуда такие данные?
Вроде как виджеты в Qt5 особенно не переделывались по сравнению с Qt4.
Да по идее и не должны были так кардинально измениться.
Записан

Qt 5.11/4.8.7 (X11/Win)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Сентябрь 09, 2015, 11:24 »

ХЗ. Помню, кто-то говорил мне об этом. Утверждать не буду на 146%.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Сентябрь 09, 2015, 11:40 »

Имхо, огромный плюс Qt в том, что он сам рисует контролы.
Мало того, что это обеспечивает кросс-платформенность, так и обеспечивает тюнинг через QSS.
Записан

Qt 5.11/4.8.7 (X11/Win)
arhiv6
Гость
« Ответ #9 : Сентябрь 15, 2015, 21:14 »

Всем спасибо. По совету Пантер реализовал с помощью WinAPI.
Цитировать
Вроде же в Qt5 контролы имеют свои виндовые хендлы, не?
Нет, по крайней мере через Control Viewer (аналог Spy) никакая информация об элементах формы не доступна.
Записан
Bepec
Гость
« Ответ #10 : Сентябрь 16, 2015, 01:37 »

А как реализовал то? Если программа не имела хендлов? Улыбающийся
Записан
arhiv6
Гость
« Ответ #11 : Сентябрь 20, 2015, 22:33 »

Цитировать
Нет, по крайней мере через Control Viewer (аналог Spy) никакая информация об элементах формы не доступна.
- это я о своей Qt5 программе.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #12 : Сентябрь 21, 2015, 20:41 »

Всем спасибо. По совету Пантер реализовал с помощью WinAPI.
Вопрос об этом. Главное окно, естественно, ловится. А все контролы внутри - нет.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Сентябрь 22, 2015, 10:07 »

Если нужно автоматизировать copy/paste, то не лучше ли сделать чужому окну нужные move и resize а затем запустить записанный скрипт нажатий мыша и клавы?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.065 секунд. Запросов: 23.