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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Список объектов Qt с exe файла  (Прочитано 7443 раз)
developer
Гость
« : Сентябрь 26, 2008, 10:17 »

Здравствуйте, каким способом можно получить список всех объектов Qt, из  exe файла(exe естественно написан на Qt). Точнее, как получить доступ к припустим кнопке, и изменить ее надпись.
Записан
kirill
Гость
« Ответ #1 : Сентябрь 26, 2008, 10:31 »

Если посмотреть на qt exe через Spy++ то видно что все окна в т.ч. кнопки имеют класс "QWidget".
Поэтому ищи все окна c таким классом. Ну а кнопку ищи по ее тексту.
Записан
developer
Гость
« Ответ #2 : Сентябрь 26, 2008, 11:50 »

Ок, а как сделать ето программно, что надо использовать, какие функции?. Можно ли ето сделать с помощью библиотеки Qt?
Записан
Tonal
Гость
« Ответ #3 : Сентябрь 26, 2008, 18:39 »

Если программа слинкована динамически, то всё довольно просто:
Берёшь ту же версию Qt, тот же компилятор, пишешь собираешь dll-ку, которую внедряешь в интересующую прогу.
У а в этой dll-ке уже перебираешь все объекты в проге. Или что-нибудь ещё с ними делаешь. Улыбающийся
Записан
kirill
Гость
« Ответ #4 : Сентябрь 29, 2008, 05:46 »

Можешь заморочиться как Tonal пишет. Можешь чисто винапишными функциями.


HWND FindWindow(
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName
);

BOOL SetWindowText(
    HWND hWnd,
    LPCTSTR lpString
);
Записан
Tonal
Гость
« Ответ #5 : Сентябрь 29, 2008, 12:44 »

Можно, но Qt сама рисует кнопки, метки (label), редакторы и т.д. Т.е. на сложный диалог 1 виндовое окно.
И управлять им получится только на уровне закрыть/переместить/установить заголовок. Улыбающийся
Правда можно всякими SendKeys-ами выкрутиться. Улыбающийся
« Последнее редактирование: Сентябрь 29, 2008, 12:47 от Tonal » Записан
developer
Гость
« Ответ #6 : Сентябрь 29, 2008, 19:52 »

А что если, с помощью арі-функции FindWindow() найти нужное окно, и етот HWND вернуть кутешной функции find() которая и возвращает указатель на виджет, ну а потом с етим указателем делать что надо - то-есть найти всех его детей, и соответственно иметь доступ к их функциям членам. Выдержит ли такая "теория" вашу критику. Не пробовал такого на практике.
Записан
kirill
Гость
« Ответ #7 : Сентябрь 30, 2008, 05:48 »

А что если, с помощью арі-функции FindWindow() найти нужное окно, и етот HWND вернуть кутешной функции find() которая и возвращает указатель на виджет, ну а потом с етим указателем делать что надо - то-есть найти всех его детей, и соответственно иметь доступ к их функциям членам. Выдержит ли такая "теория" вашу критику. Не пробовал такого на практике.
Можешь даже не пробовать. find ищет только среди своих qwidget. Чтобы она так отработала надо внедряться, как пишет Tonal.
Записан
developer
Гость
« Ответ #8 : Октябрь 01, 2008, 14:00 »

Цитировать
Если программа слинкована динамически, то всё довольно просто:
Берёшь ту же версию Qt, тот же компилятор, пишешь собираешь dll-ку, которую внедряешь в интересующую прогу.
У а в этой dll-ке уже перебираешь все объекты в проге. Или что-нибудь ещё с ними делаешь. Улыбающийся
Tonal, а можна как-то поподробнее, я даже не знаком с технологией внедрения dll. А тут еще и перебор объектов. Как ето сделать. Очень прошу помочь. Можна мануал.
Записан
Tonal
Гость
« Ответ #9 : Октябрь 01, 2008, 21:46 »

Набери в гугле "внедрить dll" и читай - инфы море.
Перебор тоже вполне осуществимо - у каждого QObject-а можно запросить детей. Берёшь QApplication и вперёд! :-)
Только версии библиотек и компиляторов обязаны совпадать.
Записан
kirill
Гость
« Ответ #10 : Октябрь 02, 2008, 05:52 »

Цитировать
Если программа слинкована динамически, то всё довольно просто:
Берёшь ту же версию Qt, тот же компилятор, пишешь собираешь dll-ку, которую внедряешь в интересующую прогу.
У а в этой dll-ке уже перебираешь все объекты в проге. Или что-нибудь ещё с ними делаешь. Улыбающийся
Tonal, а можна как-то поподробнее, я даже не знаком с технологией внедрения dll. А тут еще и перебор объектов. Как ето сделать. Очень прошу помочь. Можна мануал.

читай Рихтера
Я тебе кинул главу 22 с примером.
Записан
developer
Гость
« Ответ #11 : Октябрь 02, 2008, 12:11 »

kirill, большое спасибо за твою статью - очень помогла.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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