WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ CreateMutex ( NULL, false, ExtractFileName(Application->ExeName).c_str()); if ( GetLastError () == ERROR_ALREADY_EXISTS ) { MessageDlg("Запущена вторая копия!!!", mtError, TMsgDlgButtons() mbAbort, 0); return ( 0 ); } try { Application->Initialize(); Application->Title = Application->ExeName; Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); }......... return 0;}
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ CreateMutex ( NULL, false, "{F1B6EDDD-08C8-461b-A323-7DB8A1A70B64}"); if ( GetLastError () == ERROR_ALREADY_EXISTS ) { MessageDlg("Запущена вторая копия!!!", mtError, TMsgDlgButtons() mbAbort, 0); return ( 0 ); } try { Application->Initialize(); Application->Title = Application->ExeName; Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); }......... return 0;}
CloseHandle(hMutex);//по завершению программы удалили мьютекс
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ HANDLE hMutex = 0; try { hMutex = CreateMutex(NULL, TRUE, gc_szAppMutex); // gc_szAppMutex - это и есть GUID if (GetLastError() == ERROR_ALREADY_EXISTS) { HWND h = FindWindow("TApplication", gc_szAppName); // gc_szAppName - а это имя главного окна для поиска и приподнятия if (h) { ShowWindow(h, SW_RESTORE); SetForegroundWindow(h); } return 0; } try { auto_ptrTfmSplash> f = auto_ptrTfmSplash>(new TfmSplash(NULL)); f->Show(); f->Update(); TDateTime dtStart = TDateTime::CurrentDateTime(); Application->Initialize(); Application->Title = gc_szAppName; // Тут инициализируем наименование главного окна, что уже упоминалось выше Application->CreateForm(__classid(Tfm), &fm); Application->CreateForm(__classid(Tfmi), &fmi); TDateTime dtNow = TDateTime::CurrentDateTime(); while (MilliSecondsBetween(dtStart, dtNow) 3000) { Application->ProcessMessages(); Sleep(100); dtNow = TDateTime::CurrentDateTime(); } f->Hide(); SendMessage(fm->Handle, CM_INIT_COMPLETE, 0, 0); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } } __finally { if (hMutex) CloseHandle(hMutex); // А вдруг? } return 0;}