Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: ctin от Декабрь 26, 2012, 13:07



Название: Открытие основного окна при попытке повторно запустить приложение
Отправлено: ctin от Декабрь 26, 2012, 13:07
Было много вопросов на эту тему, я решил предложить свой, рабочий :)
При повторном запуске отправляет окно программы на передний план.

main.cpp
Код:
...
    QLabel label("text");
    QSharedMemory sharedMemory("SonetTest");
    const int size = sizeof(void*);
    if(!sharedMemory.create(size, QSharedMemory::ReadWrite))
        {
            sharedMemory.lock();
            SetForegroundWindow (*(HWND*)sharedMemory.constData());//вынимаем указатель как содержимое указателя на constData
            //qWarning() << "has attached id" << *(HWND*)sharedMemory.constData();
            sharedMemory.unlock();
            sharedMemory.detach();
            return 0;
        }
        else
        {
            label.show();
            sharedMemory.lock();
            *((void**)sharedMemory.data()) = label.winId();//засовываем указатель в содержимое data
            //qWarning() << "now id attached" << (*(HWND*)sharedMemory.constData());
            sharedMemory.unlock();
        }