Главная / FAQ по Builder'у / 31 Как проверить, запущена...

31 Как проверить, запущена ли вторая копия программы?


const char *mutexname = "mtxUIV2";

//--------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
//-----------------------------------------------------------
        HWND hMutex = CreateMutex(NULL, true, mutexname);
        DWORD LastErr = GetLastError();
        if ((LastErr == ERROR_ALREADY_EXISTS)||
            (LastErr == ERROR_INVALID_HANDLE)||
            (!hMutex))
         {
          MessageDlg("Программа уже запущена",
                        mtError, TMsgDlgButtons() << mbOK, 0);
          exit(1);
          return 1;
         }
//-----------------------------------------------------------
        try
        {
                 Application->Initialize();
                 Application->CreateForm(__classid(TMainForm), &MainForm);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        ReleaseMutex(hMutex);
        CloseHandle(hMutex);// по совету BoundsChecker'а :)

        return 0;
}
Sergei A Fedorov

*Примечание:

Для имени мьютекса желательно подобрать что-то вроде "mtxUIV2{01F57C21-EEB8-11D3-B16F-00A0C9E87D61}" , а сам GUID номер генерить для каждого нового приложения приложения.
Andrew Leonov 2:4641/143.911

Предыдущий вопрос   |  Список вопросов   |   Следующий вопрос

источник      На главную      by jenyok
Copyright © 2003 JTSOFT
Сайт управляется системой uCoz