Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Имитация действий в wxWidgets


Автор: disputant 13.4.2016, 16:04
Добрый день!
Есть такая проблема. Программа, написана на Visual C++ с использованием wxWidgets. Задача: сымитировать рабочую сессию. Т.е. переписать программу так, чтобы можно было задать что-то типа описания действий, и программа запускается, и начинает автоматически нажимать кнопочки, выбирать пункты меню и т.п.
Основная проблема — как это делается? Требуется, чтобы при нажатии кнопки отработали все действия из соответствующего обработчика. Как я понимаю, надо создать wxCommandEvent, и как-то его передать обработчику. Пробовал в главном окне что-то типа для кнопки-переключателя
Код

wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED,id_button);
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);

Ничего не сработало. Как это делать правильно, и второй вопрос — где? В какой функции? Чтоб можно было программу, грубо говоря, из пакетного файла запустить, чтоб она сама все посчитала и закрылась, без малейшего вмешательства человека.


Автор: Amp 14.4.2016, 12:56
Тебе надо будет завести отдельный поток, который будет находить эвентхэндлеры (окна, диалоги, панели, кнопки) и посылать им сообщения. К примеру находится кнопка по какому-то признаку (wxWindow::FindWindow), посылается ей эвент, затем ищется диалог, который появился после нажатия, и происходит работа уже с ним. Хорошо, если тебе вдруг известны идентификаторы виджетов. Тонкостей там очень много. 

Главный вопрос - зачем тебе все это? Тестирование UI? Автоматизация действий? Может в твоем случае проще будет взять стороннее приложение типа AutoIt.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)