Russian Qt Forum

Qt => Вопросы новичков => Тема начата: sergek от Июль 19, 2018, 12:23



Название: Win API [Решено]
Отправлено: sergek от Июль 19, 2018, 12:23
Жаль, что нет "вопросы идиотов")) У меня вопрос из этого раздела - скажите, GUI в windows в Qt сделан на основе win api? Можно ли использовать win api для доступа к элементами GUI программ qt?


Название: Re: Win API
Отправлено: kuzulis от Июль 19, 2018, 13:09
> GUI в windows в Qt сделан на основе win api?

угу

> Можно ли использовать win api для доступа к элементами GUI программ qt?

Вроде нет, т.к. все виджеты отрисовываются самим Qt, и не являются "нативными" объектами.
Можно найти только хендл самого окна приложения, но вот хендлы его контролов/виджетов не найдешь, их нет :).

PS: Хотя хз, никогда не задавался таким вопросом.


Название: Re: Win API
Отправлено: Igors от Июль 19, 2018, 13:49
Во всяком случае нативные хендлы создаются при вызове QWidget::winId(), хотя иногда глючат размеры, лучше до show. Получать таким образом нужное HWND можно, причем не только для окон верхнего уровня.


Название: Re: Win API
Отправлено: sergek от Июль 19, 2018, 14:31
Ок, спасибо. Действительно, получить окно у меня получалось, а самый простой lineedit - нет.
Закроем тему.


Название: Re: Win API [Решено]
Отправлено: Igors от Июль 19, 2018, 14:58
Да простят мою навязчивость, но я ведь помню что работало
Код:
#include <QtWidgets>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QWidget * win = new QWidget;
printf("winID = %p\n", (void *) win->winId());

QLineEdit * edit = new QLineEdit(win);
WId id = edit->winId();
printf("editID = %p\n", (void *) id);

win->show();

return app.exec();
}
id ненулевой, и тот самый что покажет утилита Spy


Название: Re: Win API [Решено]
Отправлено: sergek от Июль 19, 2018, 16:02
Речь немного о другом - нужно прочитать содержимое элементов GUI программы, написанной на Qt. Я раньше делал нечто подобное - отыскивается дескриптор главного окна программы, потом перебираются дочерние дескрипторы и т.д. Это получается со многими программами, например, попробовал сейчас winscp, putty (во вложении), с проводником. А для программ qt отрисовывается только главное окно и все.
Вообще-то это не мне нужно, а мне сильно углубляться в тему не хочется. Так, попробовал старые наработки - не получилось, и ладно)
Спасибо, коллеги.