• Codeby web-security - Курс "Тестирование Веб-Приложений на проникновение с нуля" от команды codeby. Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь. Мобильный клиент для IOS находится в itunes по этой ссылке

Проблема Как добавить окно(QWidget) в модуль?

23.zaycev

New member
23.04.2018
3
3
#1
Здравствуйте. При разборе очередного модуля нужно добавить UI-интерфейс для добавления нужных элементов. Можете что посоветовать? Спасибо.

main.cpp

C++:
#include "VeyonCore.h"

#include <QCoreApplication>
#include <QAbstractNativeEventFilter>
#include <QWidget>
#include <QMainWindow>

#include "WindowsService.h"
#include "ComputerControlServer.h"
#include "VeyonConfiguration.h"


#ifdef VEYON_BUILD_WIN32
static HANDLE hShutdownEvent = NULL;

// event filter which makes ICA recognize logoff events etc.
class LogoffEventFilter : public QAbstractNativeEventFilter
{
public:
    virtual bool nativeEventFilter( const QByteArray& eventType, void *message, long *result)
    {
        Q_UNUSED(eventType);
        Q_UNUSED(result);

        DWORD winMsg = ( ( MSG *) message )->message;

        if( winMsg == WM_QUERYENDSESSION )
        {
            qInfo( "Got WM_QUERYENDSESSION - initiating server shutdown" );

            // tell UltraVNC server to quit
            SetEvent( hShutdownEvent );
        }

        return false;
    }

};

#endif


int main( int argc, char **argv )
{

    // decide in what mode to run
    if( argc >= 2 )
    {
#ifdef VEYON_BUILD_WIN32
        for( int i = 1; i < argc; ++i )
        {
            if( QString( argv[i] ).toLower().contains( "service" ) )
            {
                WindowsService winService( "VeyonService", "-service", "Veyon Service",
                                            QString(), argc, argv );
                if( winService.evalArgs( argc, argv ) )
                {
                    return 0;
                }
                break;
            }
        }
#endif
    }

    QCoreApplication app( argc, argv );

    VeyonCore core( &app, QStringLiteral("Service") );

    // parse arguments
    QStringListIterator argIt( app.arguments() );
    argIt.next();

    while( argc > 1 && argIt.hasNext() )
    {
        const QString a = argIt.next().toLower();

        if( a == QStringLiteral("-session") && argIt.hasNext() )
        {
            int sessionId = argIt.next().toUInt();
            if( sessionId > 0 )
            {
                core.config().setPrimaryServicePort( core.config().primaryServicePort() + sessionId );
                core.config().setVncServerPort( core.config().vncServerPort() + sessionId );
                core.config().setFeatureWorkerManagerPort( core.config().featureWorkerManagerPort() + sessionId );
            }
        }
    }

#ifdef VEYON_BUILD_WIN32
    hShutdownEvent = OpenEvent( EVENT_ALL_ACCESS, false, L"Global\\SessionEventUltra" );
    if( !hShutdownEvent )
    {
        // no global event available already as we're not running under the
        // control of the veyon service supervisor?
        if( GetLastError() == ERROR_FILE_NOT_FOUND )
        {
            qWarning( "Creating session event" );
            // then create our own event as otherwise the VNC server main loop
            // will eat 100% CPU due to failing WaitForSingleObject() calls
            hShutdownEvent = CreateEvent( NULL, false, false, L"Global\\SessionEventUltra" );
        }
        else
        {
            qWarning( "Could not open or create session event" );
        }
    }

    LogoffEventFilter eventFilter;

    app.installNativeEventFilter( &eventFilter );
#endif

    auto server = new ComputerControlServer;
    server->start();

    qInfo( "Exec" );

    int ret = app.exec();

    delete server;

    qInfo( "Exec Done" );

#ifdef VEYON_BUILD_WIN32
    CloseHandle( hShutdownEvent );
#endif

    return ret;
}
P.S.: исходный проект называется Veyon rev.4.0.4, модуль service. Собирался проект в Qt через CMakeLists.txt. Добавлять файл в проект(к примеру, UI) отказывается(ПКМ->"Добавить новый...").
 
Вверх Снизу