Russian Qt Forum

Qt => Общие вопросы => Тема начата: developer от Сентябрь 26, 2008, 10:17



Название: Список объектов Qt с exe файла
Отправлено: developer от Сентябрь 26, 2008, 10:17
Здравствуйте, каким способом можно получить список всех объектов Qt, из  exe файла(exe естественно написан на Qt). Точнее, как получить доступ к припустим кнопке, и изменить ее надпись.


Название: Re: Список объектов Qt с exe файла
Отправлено: kirill от Сентябрь 26, 2008, 10:31
Если посмотреть на qt exe через Spy++ то видно что все окна в т.ч. кнопки имеют класс "QWidget".
Поэтому ищи все окна c таким классом. Ну а кнопку ищи по ее тексту.


Название: Re: Список объектов Qt с exe файла
Отправлено: developer от Сентябрь 26, 2008, 11:50
Ок, а как сделать ето программно, что надо использовать, какие функции?. Можно ли ето сделать с помощью библиотеки Qt?


Название: Re: Список объектов Qt с exe файла
Отправлено: Tonal от Сентябрь 26, 2008, 18:39
Если программа слинкована динамически, то всё довольно просто:
Берёшь ту же версию Qt, тот же компилятор, пишешь собираешь dll-ку, которую внедряешь в интересующую прогу.
У а в этой dll-ке уже перебираешь все объекты в проге. Или что-нибудь ещё с ними делаешь. :)


Название: Re: Список объектов Qt с exe файла
Отправлено: kirill от Сентябрь 29, 2008, 05:46
Можешь заморочиться как Tonal пишет. Можешь чисто винапишными функциями.


HWND FindWindow(
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName
);

BOOL SetWindowText(
    HWND hWnd,
    LPCTSTR lpString
);


Название: Re: Список объектов Qt с exe файла
Отправлено: Tonal от Сентябрь 29, 2008, 12:44
Можно, но Qt сама рисует кнопки, метки (label), редакторы и т.д. Т.е. на сложный диалог 1 виндовое окно.
И управлять им получится только на уровне закрыть/переместить/установить заголовок. :)
Правда можно всякими SendKeys-ами выкрутиться. :)


Название: Re: Список объектов Qt с exe файла
Отправлено: developer от Сентябрь 29, 2008, 19:52
А что если, с помощью арі-функции FindWindow() найти нужное окно, и етот HWND вернуть кутешной функции find() которая и возвращает указатель на виджет, ну а потом с етим указателем делать что надо - то-есть найти всех его детей, и соответственно иметь доступ к их функциям членам. Выдержит ли такая "теория" вашу критику. Не пробовал такого на практике.


Название: Re: Список объектов Qt с exe файла
Отправлено: kirill от Сентябрь 30, 2008, 05:48
А что если, с помощью арі-функции FindWindow() найти нужное окно, и етот HWND вернуть кутешной функции find() которая и возвращает указатель на виджет, ну а потом с етим указателем делать что надо - то-есть найти всех его детей, и соответственно иметь доступ к их функциям членам. Выдержит ли такая "теория" вашу критику. Не пробовал такого на практике.
Можешь даже не пробовать. find ищет только среди своих qwidget. Чтобы она так отработала надо внедряться, как пишет Tonal.


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


Название: Re: Список объектов Qt с exe файла
Отправлено: Tonal от Октябрь 01, 2008, 21:46
Набери в гугле "внедрить dll" и читай - инфы море.
Перебор тоже вполне осуществимо - у каждого QObject-а можно запросить детей. Берёшь QApplication и вперёд! :-)
Только версии библиотек и компиляторов обязаны совпадать.


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

читай Рихтера
Я тебе кинул главу 22 с примером.


Название: Re: Список объектов Qt с exe файла
Отправлено: developer от Октябрь 02, 2008, 12:11
kirill, большое спасибо за твою статью - очень помогла.