Как не допустить второго запуска программы?
|
В начале программы (ИМХО, лучше всего до "Application->Initialize();") пишем:
hMutex = CreateMutex(NULL,true,"some_big_big_unique_mutex_name"); if (GetLastError()==ERROR_ALREADY_EXISTS) { // мы уже есть - ругаемся и выходим ShowMessage("proga already loaded"); Application->Terminate(); }
В конце пишем:
ReleaseMutex(hMutex); // это обязательно, а то до перезагрузки прога второй раз не запустится
Вариант #2 - Атомы:
В принципе, аналогичный предыдущему вариант. В начале программы (ИМХО, лучше всего до "Application->Initialize();") пишем:
AnsiString AtomName = "some_big_big_unique_atom_name"; ATOM Atom;
if (GlobalFindAtom(AtomName.c_str()) == 0) { // создаём атом Atom = GlobalAddAtom(AtomName); } else { // мы уже есть - ругаемся и выходим ShowMessage("proga already loaded"); Application->Terminate(); }
В конце пишем:
GlobalDeleteAtom(Atom); // это обязательно, ато до перезагрузки прога второй раз не запустится
Вариант #3 - FindWindow:
Для этого метода необходимо, чтобы главное окно вашей программы имело уникальное имя класса или заголовок. Например, имя класса главной формы - "Tformochka". Тогда в начале программы (ИМХО, лучше всего до "Application->Initialize();") пишем:
HWND hWnd = FindWindow("Tformochka",NULL); // ищем своё окно if (hWnd!=NULL) // если нашли { ShowMessage("proga already loaded"); // ругаемся SetForegroundWindow(hWnd); // активизируем предыдущую копию проги Application->Terminate(); // закрываемся }
|