C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как не допустить второго запуска программы / Система (OC) / Borland C++

Вариант #1 - Мутексы:

В начале программы (ИМХО, лучше всего до "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(); // закрываемся
        }