Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запуск одного экземпляра программы.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
shakil
Под виндой, чтобы не запускать более одного экземпляра приложения нужно сделать FindWindow и если такое окно есть, то делаем его активным, а новый экземпляр не запускаем.

Подобное можно сделать на Qt?
QCasper
Цитата(shakil @ 10.12.2007, 18:22) *
Под виндой, чтобы не запускать более одного экземпляра приложения нужно сделать FindWindow и если такое окно есть, то делаем его активным, а новый экземпляр не запускаем.

Подобное можно сделать на Qt?


В Qt Solutions есть что-то типа QSingleApplication, если я ничего не путаю. А что мешает использовать тот же самый FindWindow?
Mixolap
глянь тут:
http://qtfaq.ru/index.php?option=com_conte...0&Itemid=26
QCasper
Цитата(Mixolap @ 10.12.2007, 22:38) *


Ну вот, даже для opensource есть :)
shakil
Спасибо, оперативно помогли. :)
iluxa
Цитата(QCasper @ 11.12.2007, 0:03) *
Цитата(Mixolap @ 10.12.2007, 22:38) *


Ну вот, даже для opensource есть :)

Уважаемые, не поделитесь ли классом =), ибо по ссылке ничего не найденно, т.к. сайт видимо реконструировали, и теперь там вообще подобного нет. Заранее Спасибо.
Tonal
У меня есть модуль для винды написанный на python-е.
Могу выложить, если кому надо. :-)
Litkevich Yuriy
я в Борланде делал через именованый мьютекс:
const char *NamedMutex = "ESPA Demon"; // именованный mutex

HANDLE CheckInstance( const char *Name)
{
HANDLE Mutex = CreateMutex(NULL,true,Name);

    int r = GetLastError();
    if (r) return 0;
    return Mutex;
}
//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HANDLE Mutex = CheckInstance(NamedMutex);

    if (!Mutex)
    {
        ShowMessage(" Приложение уже запущено! ");
        ReleaseMutex(Mutex);
        return 1;
    }
    
    try
    {
        Application->Initialize();
        Application->Title = "ESPA Demon";
        Application->CreateForm(__classid(TFrmMain), &FrmMain);
        Application->CreateForm(__classid(TFrmModBus), &FrmModBus);
        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    return 0;
}


Где-то у кого-то, когда-то подсмотрел, может по аналогии и зделать в Qt'ях
Mixolap
Класс DSingleApplication может помочь.
скачать с qtfaq.ru
Litkevich Yuriy
Mixolap, он у тебя через порты реализован, а их может брандмауэр банить, я вот еще вариант нашел через Instance()
Tonal
2 Litkevich Yuriy И причём тут экземпляр приложения?
По ссылке простейшая реализация синглетона для диалога, а приложений с такими диалогами можно наоткрывать пока память не закончиться. :-)
Litkevich Yuriy
Но ведь Instance() применим и к QApplication, может быть можно через него отслеживать запущеное приложение?
iluxa
Всем спасибо, пока вопрос отложен, за неимением подходящего результата =), жаль что QSingleApplication закрыт =(
Tonal
Цитата(Litkevich Yuriy @ 27.2.2008, 14:04) *
Но ведь Instance() применим и к QApplication, может быть можно через него отслеживать запущенное приложение?

Как? Магией?
Для того, чтобы приложения могли общаться между собой (отслеживание экземпляров это тоже общение) нужно чтобы кто-то обращался к сервисам операционной системы.
QApplication этого не делает.
Стало быть тебе нужно это сделать самостоятельно. По приведённой ссылке ничего похожего нет. :-)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.