crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Делаем как Squish for QT, Известный тестер показывает в демо ролике просто чудеса интеграции
alexus_ru
  опции профиля:
сообщение 4.2.2009, 23:37
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 4.2.2009
Пользователь №: 530

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток
У меня очень зловредный вопрос
Допустим у нас есть скомпилированный exe прога на c++ под QT
мы берем вторую прогу и вызываем методы первой проги. Читаем виджеты первой проги. видим все ее объекты
при этом это совершенно обычная программа..без QTScriptEngine или даже ActiveX
и мы получаем например все ТекстБоксы и читаем их значения, пользуясь объектной моделью QT
Так делает вот эта супер программа - Squish for QT
:(
я никак не могу понять как это сделать(
и если в принципе невозможно...то какая технология могла бы быть к этому максимально приближена?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.2.2009, 0:52
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


alexus_ru, а свои варианты есть?

П.С. не плоди копии сообщений
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 5.2.2009, 1:24
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Просто догадка. Возможно программа находит указатель qApp (QApplication), а уже через него получает все остальное: QApplication::allWidgets ()

Вторая догадка состоит в том, что программа вешает хуки на основные функции библиотеки Qt. В результате когда программа обращается к функциям Qt на самом деле проходит через прослойку.

Ну или используется какой-нибудь механизм иньекции, что позволяет обращаться к методам Qt от имени самой программы.

Сообщение отредактировал SABROG - 5.2.2009, 1:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DmP
  опции профиля:
сообщение 5.2.2009, 8:18
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 61
Регистрация: 11.3.2008
Пользователь №: 116

Спасибо сказали: 15 раз(а)




Репутация:   2  


Цитата(Litkevich Yuriy @ 5.2.2009, 0:52) *
Просто догадка. Возможно программа находит указатель qApp (QApplication), а уже через него получает все остальное: QApplication::allWidgets ()

Скорее всего так и есть, на демо-ролике показана, что программу запускает сам Squish, потом он по видимому запускает свой поток в загруженном приложении, определяет версию Qt, потом находит QCoreApplication::self - думаю найти эту переменную в памяти не так сложно, так как она потомок QObject. А все остальное дело техники.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
alexus_ru
  опции профиля:
сообщение 5.2.2009, 13:28
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 4.2.2009
Пользователь №: 530

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
Скорее всего так и есть, на демо-ролике показана, что программу запускает сам Squish, потом он по видимому запускает свой поток в загруженном приложении, определяет версию Qt, потом находит QCoreApplication::self - думаю найти эту переменную в памяти не так сложно, так как она потомок QObject. А все остальное дело техники.

С техникой QT у меня пока не очень (
Подскажи, пожалуйста, что необходимо изучить, чтобы знать как "запустить свой поток в загруженном приложении", "найти QCoreApplication::self в памяти"
я не имею никаких догадок на этот счет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DmP
  опции профиля:
сообщение 5.2.2009, 14:46
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 61
Регистрация: 11.3.2008
Пользователь №: 116

Спасибо сказали: 15 раз(а)




Репутация:   2  


Цитата(alexus_ru @ 5.2.2009, 16:28) *
С техникой QT у меня пока не очень (

Это к Qt не имеет ни какого отношения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
alexus_ru
  опции профиля:
сообщение 5.2.2009, 15:37
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 4.2.2009
Пользователь №: 530

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(DmP @ 5.2.2009, 14:46) *
Это к Qt не имеет ни какого отношения.

Не мог бы подсказать, как это можно сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DmP
  опции профиля:
сообщение 5.2.2009, 16:11
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 61
Регистрация: 11.3.2008
Пользователь №: 116

Спасибо сказали: 15 раз(а)




Репутация:   2  


Погугли на тему "внедрение в чужой процесс".
Потом обычно в каждой программе QApplication расположен в стеке, когда окажешься в том же процессе, что и нужная программа пройдись по стеку и попробуй найти виртуальную таблицу QApplication, ну это как вариант. Сам такого не делал, точно сказать не могу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DmP
  опции профиля:
сообщение 5.2.2009, 23:24
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 61
Регистрация: 11.3.2008
Пользователь №: 116

Спасибо сказали: 15 раз(а)




Репутация:   2  


Есть еще вариант Accessibility, возможно это то что нужно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 6.2.2009, 0:44
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(DmP @ 5.2.2009, 23:24) *
Есть еще вариант Accessibility, возможно это то что нужно.

А это случаем не интерфейс для создания приложений для людей с ограниченными способностями?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.1.2023, 4:04