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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Win API [Решено]  (Прочитано 482 раз)
sergek
Программист
*****
Offline Offline

Сообщений: 588


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


Просмотр профиля
« : Июль 19, 2018, 12:23 »

Жаль, что нет "вопросы идиотов")) У меня вопрос из этого раздела - скажите, GUI в windows в Qt сделан на основе win api? Можно ли использовать win api для доступа к элементами GUI программ qt?
« Последнее редактирование: Июль 19, 2018, 14:31 от sergek » Записан

Qt 5.11.1 Qt Creator 4.7.2
Win7, Win10, Ubuntu 16.04
kuzulis
Джедай : наставник для всех
*******
Online Online

Сообщений: 2662


Просмотр профиля
« Ответ #1 : Июль 19, 2018, 13:09 »

> GUI в windows в Qt сделан на основе win api?

угу

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

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

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

ArchLinux x86_64 / Win10 64 bit
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10273


Просмотр профиля
« Ответ #2 : Июль 19, 2018, 13:49 »

Во всяком случае нативные хендлы создаются при вызове QWidget::winId(), хотя иногда глючат размеры, лучше до show. Получать таким образом нужное HWND можно, причем не только для окон верхнего уровня.
Записан
sergek
Программист
*****
Offline Offline

Сообщений: 588


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


Просмотр профиля
« Ответ #3 : Июль 19, 2018, 14:31 »

Ок, спасибо. Действительно, получить окно у меня получалось, а самый простой lineedit - нет.
Закроем тему.
Записан

Qt 5.11.1 Qt Creator 4.7.2
Win7, Win10, Ubuntu 16.04
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10273


Просмотр профиля
« Ответ #4 : Июль 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
Записан
sergek
Программист
*****
Offline Offline

Сообщений: 588


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


Просмотр профиля
« Ответ #5 : Июль 19, 2018, 16:02 »

Речь немного о другом - нужно прочитать содержимое элементов GUI программы, написанной на Qt. Я раньше делал нечто подобное - отыскивается дескриптор главного окна программы, потом перебираются дочерние дескрипторы и т.д. Это получается со многими программами, например, попробовал сейчас winscp, putty (во вложении), с проводником. А для программ qt отрисовывается только главное окно и все.
Вообще-то это не мне нужно, а мне сильно углубляться в тему не хочется. Так, попробовал старые наработки - не получилось, и ладно)
Спасибо, коллеги.
Записан

Qt 5.11.1 Qt Creator 4.7.2
Win7, Win10, Ubuntu 16.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

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